]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/macros/AddTaskD0Mass.C
Update by Zaida:
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / macros / AddTaskD0Mass.C
1 AliAnalysisTaskSED0Mass *AddTaskD0Mass(Int_t flag=0/*0 = D0,1 = LS*/,Bool_t readMC=kFALSE,
2                                        Bool_t filldistr=kFALSE,Bool_t cutOnDistr=kFALSE,
3                                        Int_t system=0/*0=pp,1=PbPb*/,Int_t flagD0D0bar=0,
4                                        Float_t minC=0, Float_t maxC=0,
5                                        TString finDirname="Loose",
6                                        TString finname="D0toKpiCuts.root",TString finObjname="D0toKpiCuts", Bool_t flagAOD049=kFALSE,
7                                        Bool_t FillMassPt=false, Bool_t FillImpPar=false)
8 {
9   //
10   // AddTask for the AliAnalysisTaskSE for D0 candidates
11   // invariant mass histogram and association with MC truth 
12   // (using MC info in AOD) and cut variables distributions
13   // C.Bianchin  chiara.bianchin@pd.infn.it
14   //
15
16
17   // Get the pointer to the existing analysis manager via the static access method.
18   //==============================================================================
19   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
20   if (!mgr) {
21     ::Error("AddTaskD0Distr", "No analysis manager to connect to.");
22     return NULL;
23   }   
24
25   TString filename="",out1name="",out2name="",out3name="",out4name="",out5name="",out6name="",out7name="",inname="";
26   filename = AliAnalysisManager::GetCommonFileName();
27   filename += ":PWG3_D2H_";
28   if(flag==0){
29     filename+="D0InvMass";
30     if(cutOnDistr) filename+="C"; 
31     if(flagD0D0bar==1)filename+="D0";
32     if(flagD0D0bar==2)filename+="D0bar";
33     //list mass
34     out1name="coutputmassD0Mass";
35     if(cutOnDistr) out1name+="C"; 
36     if(flagD0D0bar==1)out1name+="D0";
37     if(flagD0D0bar==2)out1name+="D0bar";
38     //list distr
39     out2name="coutputmassD0distr";
40     if(cutOnDistr) out2name+="C"; 
41     if(flagD0D0bar==1)out2name+="D0";
42     if(flagD0D0bar==2)out2name+="D0bar";
43    //hist entries
44     out3name="nEntriesD0";
45     if(cutOnDistr) out3name+="C"; 
46     if(flagD0D0bar==1)out3name+="D0";
47     if(flagD0D0bar==2)out3name+="D0bar";
48    //cuts object
49     out4name="cutsD0";
50     if(cutOnDistr) out4name+="C"; 
51     if(flagD0D0bar==1)out4name+="D0";
52     if(flagD0D0bar==2)out4name+="D0bar";
53
54     //AliNormalizationCounter
55     out5name="normalizationCounter";
56     if(cutOnDistr) out5name+="C"; 
57     if(flagD0D0bar==1)out5name+="D0";
58     if(flagD0D0bar==2)out5name+="D0bar";
59
60     // mass, pt, imp param distr
61     out6name="coutputmassD0MassPt";
62     if(cutOnDistr) out6name+="C"; 
63     if(flagD0D0bar==1)out6name+="D0";
64     if(flagD0D0bar==2)out6name+="D0bar";
65
66     out7name ="coutputVarTree";
67
68     inname="cinputmassD0_0";
69     if(cutOnDistr) inname+="C"; 
70     if(flagD0D0bar==1)inname+="D0";
71     if(flagD0D0bar==2)inname+="D0bar";
72
73   } else {
74     filename+="D0InvMassLikeSign";
75     if(cutOnDistr) filename+="C"; 
76     if(flagD0D0bar==1)filename+="D0";
77     if(flagD0D0bar==2)filename+="D0bar";
78     //list mass
79     out1name="coutputmassLSMass";
80     if(cutOnDistr) out1name+="C"; 
81     if(flagD0D0bar==1)out1name+="D0";
82     if(flagD0D0bar==2)out1name+="D0bar";
83     //list distr
84     out2name="coutputmassLSdistr";
85     if(cutOnDistr) out2name+="C"; 
86     if(flagD0D0bar==1)out2name+="D0";
87     if(flagD0D0bar==2)out2name+="D0bar";
88    //hist entries
89     out3name="nEntriesLS";
90     if(cutOnDistr) out3name+="C"; 
91     if(flagD0D0bar==1)out3name+="D0";
92     if(flagD0D0bar==2)out3name+="D0bar";
93    //cuts object
94     out4name="cutsLS";
95     if(cutOnDistr) out4name+="C"; 
96     if(flagD0D0bar==1)out4name+="D0";
97     if(flagD0D0bar==2)out4name+="D0bar";
98
99     inname="cinputmassD0_1";
100     if(cutOnDistr) inname+="C"; 
101     if(flagD0D0bar==1)inname+="D0";
102     if(flagD0D0bar==2)inname+="D0bar";
103   }
104   filename += finDirname.Data();
105   out1name += finDirname.Data();
106   out2name += finDirname.Data();
107   out3name += finDirname.Data(); 
108   out4name += finDirname.Data(); 
109   out5name += finDirname.Data(); 
110   out6name += finDirname.Data();
111   out7name += finDirname.Data();
112   inname += finDirname.Data();
113
114    //setting my cut values
115
116     //cuts order
117     //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
118     //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
119     //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
120     //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
121     //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
122     //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
123     //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
124     //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
125     //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);
126
127   Bool_t stdcuts=kFALSE;
128   TFile* filecuts=new TFile(finname.Data());
129   if(!filecuts->IsOpen()){
130     cout<<"Input file not found: using std cut object"<<endl;
131     stdcuts=kTRUE;
132   }
133
134   AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
135   if(stdcuts) {
136     if(system==0) RDHFD0toKpi->SetStandardCutsPP2010();
137     else {
138       RDHFD0toKpi->SetStandardCutsPbPb2010();
139       if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
140         RDHFD0toKpi->SetMinCentrality(minC);
141         RDHFD0toKpi->SetMaxCentrality(maxC);
142       }
143       if(flagAOD049)RDHFD0toKpi->SetUseAOD049(kTRUE);
144       RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M);
145     }
146   }
147   else   {
148     RDHFD0toKpi = (AliRDHFCutsD0toKpi*)filecuts->Get(finObjname.Data());
149     if(!RDHFD0toKpi){
150       cout<<"Specific AliRDHFCuts not found"<<endl;
151       return;
152     }
153     if(flagAOD049)RDHFD0toKpi->SetUseAOD049(kTRUE);
154     if(minC!=0 && maxC!=0) { //if centrality 0 and 0 leave the values in the cut object
155       RDHFD0toKpi->SetMinCentrality(minC);
156       RDHFD0toKpi->SetMaxCentrality(maxC);
157     } 
158   }
159   //  RDHFD0toKpi->SetName(Form("D0toKpiCuts%d",flag));
160
161   TString centr="";
162   if(minC!=0 && maxC!=0) centr = Form("%.0f%.0f",minC,maxC);
163   else centr = Form("%.0f%.0f",RDHFD0toKpi->GetMinCentrality(),RDHFD0toKpi->GetMaxCentrality());
164   out1name+=centr;
165   out2name+=centr;
166   out3name+=centr;
167   out4name+=centr;
168   out5name+=centr;
169   out6name+=centr;
170   out7name+=centr;
171   inname+=centr;
172
173   // Aanalysis task    
174   TString taskname="MassAndDistrAnalysis";
175   if (flag==0)taskname.Prepend("D0");
176   else taskname.Prepend("LS");
177   AliAnalysisTaskSED0Mass *massD0Task = new AliAnalysisTaskSED0Mass(taskname.Data(),RDHFD0toKpi);
178   massD0Task->SetDebugLevel(0);
179   massD0Task->SetArray(flag);
180   massD0Task->SetReadMC(readMC);
181   massD0Task->SetCutOnDistr(cutOnDistr);
182   massD0Task->SetUsePid4Distr(kFALSE);
183   massD0Task->SetFillOnlyD0D0bar(flagD0D0bar);
184   massD0Task->SetSystem(system); //0=pp, 1=PbPb
185   massD0Task->SetFillVarHists(filldistr); // default is FALSE if System=PbPb
186
187   massD0Task->SetFillPtHistos(FillMassPt);
188   massD0Task->SetFillImpactParameterHistos(FillImpPar);
189   
190   //  massD0Task->SetRejectSDDClusters(kTRUE);
191
192   //   massD0Task->SetWriteVariableTree(kTRUE);
193
194   mgr->AddTask(massD0Task);
195   
196   //
197   // Create containers for input/output
198   AliAnalysisDataContainer *cinputmassD0 = mgr->CreateContainer(inname,TChain::Class(), 
199                                                           AliAnalysisManager::kInputContainer);
200
201   AliAnalysisDataContainer *coutputmassD01 = mgr->CreateContainer(out1name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass
202   AliAnalysisDataContainer *coutputmassD02 = mgr->CreateContainer(out2name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //distr
203   AliAnalysisDataContainer *coutputmassD03 = mgr->CreateContainer(out3name,TH1F::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //nev
204   AliAnalysisDataContainer *coutputmassD04 = mgr->CreateContainer(out4name,AliRDHFCutsD0toKpi::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //cuts
205   AliAnalysisDataContainer *coutputmassD05 = mgr->CreateContainer(out5name,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //counter
206   AliAnalysisDataContainer *coutputmassD06 = mgr->CreateContainer(out6name,TList::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass vs pt vs impt par
207   AliAnalysisDataContainer *coutputmassD07 = mgr->CreateContainer(out7name,TTree::Class(),AliAnalysisManager::kOutputContainer, filename.Data()); //mass vs pt vs impt par
208   
209   mgr->ConnectInput(massD0Task,0,mgr->GetCommonInputContainer());
210
211   mgr->ConnectOutput(massD0Task,1,coutputmassD01);
212   mgr->ConnectOutput(massD0Task,2,coutputmassD02);
213   mgr->ConnectOutput(massD0Task,3,coutputmassD03);
214   mgr->ConnectOutput(massD0Task,4,coutputmassD04);
215   mgr->ConnectOutput(massD0Task,5,coutputmassD05);
216   mgr->ConnectOutput(massD0Task,6,coutputmassD06);
217   mgr->ConnectOutput(massD0Task,7,coutputmassD07);
218
219
220   return massD0Task;
221 }