Update
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / macros / AddTaskD0Mass.C
1 AliAnalysisTaskSED0Mass *AddTaskD0Mass(TString finname="D0toKpiCuts.root",Int_t flag=0/*0 = D0,1 = LS*/,Bool_t readMC=kFALSE,Bool_t cutOnDistr=kFALSE)
2 {
3   //
4   // AddTask for the AliAnalysisTaskSE for D0 candidates
5   // invariant mass histogram and association with MC truth 
6   // (using MC info in AOD) and cut variables distributions
7   // C.Bianchin  chiara.bianchin@pd.infn.it
8   //
9
10
11   // Get the pointer to the existing analysis manager via the static access method.
12   //==============================================================================
13   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
14   if (!mgr) {
15     ::Error("AddTaskD0Distr", "No analysis manager to connect to.");
16     return NULL;
17   }   
18
19   TString filename="",out1name="",out2name="",out3name="",out4name="",out5name="",inname="";
20   filename = AliAnalysisManager::GetCommonFileName();
21   filename += ":PWG3_D2H_";
22   if(flag==0){
23     filename+="D0InvMass";
24     if(cutOnDistr) filename+="C"; 
25     //list mass
26     out1name="coutputmassD0Mass";
27     if(cutOnDistr) out1name+="C"; 
28     //list distr
29     out2name="coutputmassD0distr";
30     if(cutOnDistr) out2name+="C"; 
31     //hist entries
32     out3name="nEntriesD0";
33     if(cutOnDistr) out3name+="C"; 
34     //list checks
35     out4name="checksD0";
36     if(cutOnDistr) out4name+="C"; 
37     //cuts object
38     out5name="cutsD0";
39     if(cutOnDistr) out5name+="C"; 
40
41     inname="cinputmassD0_0";
42     if(cutOnDistr) inname+="C"; 
43
44   } else {
45     filename+="D0InvMassLikeSign";
46     if(cutOnDistr) filename+="C"; 
47     //list mass
48     out1name="coutputmassLSMass";
49     if(cutOnDistr) out1name+="C"; 
50     //list distr
51     out2name="coutputmassLSdistr";
52     if(cutOnDistr) out2name+="C"; 
53     //hist entries
54     out3name="nEntriesLS";
55     if(cutOnDistr) out3name+="C"; 
56     //list checks
57     out4name="checksLS";
58     if(cutOnDistr) out4name+="C"; 
59     //cuts object
60     out5name="cutsLS";
61     if(cutOnDistr) out5name+="C"; 
62
63     inname="cinputmassD0_1";
64     if(cutOnDistr) inname+="C"; 
65   }
66
67    //setting my cut values
68
69     //cuts order
70     //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
71     //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
72     //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
73     //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
74     //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
75     //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
76     //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
77     //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
78     //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);
79
80
81   TFile* filecuts=new TFile(finname.Data());
82   if(!filecuts->IsOpen()){
83     cout<<"Input file not found: exit"<<endl;
84     return;
85   }
86
87   AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
88   RDHFD0toKpi = (AliRDHFCutsD0toKpi*)filecuts->Get("D0toKpiCuts");
89   RDHFD0toKpi->SetName(Form("D0toKpiCuts%d",flag));
90
91   if(!RDHFD0toKpi){
92     cout<<"Specific AliRDHFCuts not found"<<endl;
93     return;
94   }
95
96   // Aanalysis task    
97   TString taskname="MassAndDistrAnalysis";
98   if (flag==0)taskname.Prepend("D0");
99   else taskname.Prepend("LS");
100   AliAnalysisTaskSED0Mass *massD0Task = new AliAnalysisTaskSED0Mass(taskname.Data(),RDHFD0toKpi);
101   massD0Task->SetDebugLevel(2);
102   massD0Task->SetArray(flag);
103   massD0Task->SetReadMC(readMC);
104   massD0Task->SetCutOnDistr(cutOnDistr);
105   mgr->AddTask(massD0Task);
106   
107   //
108   // Create containers for input/output
109   AliAnalysisDataContainer *cinputmassD0 = mgr->CreateContainer(inname,TChain::Class(), 
110                                                           AliAnalysisManager::kInputContainer);
111
112   AliAnalysisDataContainer *coutputmassD01 = mgr->CreateContainer(out1name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass
113   AliAnalysisDataContainer *coutputmassD02 = mgr->CreateContainer(out2name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //distr
114   AliAnalysisDataContainer *coutputmassD03 = mgr->CreateContainer(out3name,TH1F::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //nev
115   AliAnalysisDataContainer *coutputmassD04 = mgr->CreateContainer(out4name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //check
116   AliAnalysisDataContainer *coutputmassD05 = mgr->CreateContainer(out5name,AliRDHFCutsD0toKpi::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //cuts
117   
118   mgr->ConnectInput(massD0Task,0,mgr->GetCommonInputContainer());
119
120   mgr->ConnectOutput(massD0Task,1,coutputmassD01);
121   mgr->ConnectOutput(massD0Task,2,coutputmassD02);
122   mgr->ConnectOutput(massD0Task,3,coutputmassD03);
123   mgr->ConnectOutput(massD0Task,4,coutputmassD04);
124   mgr->ConnectOutput(massD0Task,5,coutputmassD05);
125
126
127   return massD0Task;
128 }