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)
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
17 // Get the pointer to the existing analysis manager via the static access method.
18 //==============================================================================
19 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
21 ::Error("AddTaskD0Distr", "No analysis manager to connect to.");
25 TString filename="",out1name="",out2name="",out3name="",out4name="",out5name="",out6name="",out7name="",inname="";
26 filename = AliAnalysisManager::GetCommonFileName();
27 filename += ":PWG3_D2H_";
29 filename+="D0InvMass";
30 if(cutOnDistr) filename+="C";
31 if(flagD0D0bar==1)filename+="D0";
32 if(flagD0D0bar==2)filename+="D0bar";
34 out1name="coutputmassD0Mass";
35 if(cutOnDistr) out1name+="C";
36 if(flagD0D0bar==1)out1name+="D0";
37 if(flagD0D0bar==2)out1name+="D0bar";
39 out2name="coutputmassD0distr";
40 if(cutOnDistr) out2name+="C";
41 if(flagD0D0bar==1)out2name+="D0";
42 if(flagD0D0bar==2)out2name+="D0bar";
44 out3name="nEntriesD0";
45 if(cutOnDistr) out3name+="C";
46 if(flagD0D0bar==1)out3name+="D0";
47 if(flagD0D0bar==2)out3name+="D0bar";
50 if(cutOnDistr) out4name+="C";
51 if(flagD0D0bar==1)out4name+="D0";
52 if(flagD0D0bar==2)out4name+="D0bar";
54 //AliNormalizationCounter
55 out5name="normalizationCounter";
56 if(cutOnDistr) out5name+="C";
57 if(flagD0D0bar==1)out5name+="D0";
58 if(flagD0D0bar==2)out5name+="D0bar";
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";
66 out7name ="coutputVarTree";
68 inname="cinputmassD0_0";
69 if(cutOnDistr) inname+="C";
70 if(flagD0D0bar==1)inname+="D0";
71 if(flagD0D0bar==2)inname+="D0bar";
74 filename+="D0InvMassLikeSign";
75 if(cutOnDistr) filename+="C";
76 if(flagD0D0bar==1)filename+="D0";
77 if(flagD0D0bar==2)filename+="D0bar";
79 out1name="coutputmassLSMass";
80 if(cutOnDistr) out1name+="C";
81 if(flagD0D0bar==1)out1name+="D0";
82 if(flagD0D0bar==2)out1name+="D0bar";
84 out2name="coutputmassLSdistr";
85 if(cutOnDistr) out2name+="C";
86 if(flagD0D0bar==1)out2name+="D0";
87 if(flagD0D0bar==2)out2name+="D0bar";
89 out3name="nEntriesLS";
90 if(cutOnDistr) out3name+="C";
91 if(flagD0D0bar==1)out3name+="D0";
92 if(flagD0D0bar==2)out3name+="D0bar";
95 if(cutOnDistr) out4name+="C";
96 if(flagD0D0bar==1)out4name+="D0";
97 if(flagD0D0bar==2)out4name+="D0bar";
99 inname="cinputmassD0_1";
100 if(cutOnDistr) inname+="C";
101 if(flagD0D0bar==1)inname+="D0";
102 if(flagD0D0bar==2)inname+="D0bar";
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();
114 //setting my cut values
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]);
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;
134 AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
136 if(system==0) RDHFD0toKpi->SetStandardCutsPP2010();
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);
143 if(flagAOD049)RDHFD0toKpi->SetUseAOD049(kTRUE);
144 RDHFD0toKpi->SetUseCentrality(AliRDHFCuts::kCentV0M);
148 RDHFD0toKpi = (AliRDHFCutsD0toKpi*)filecuts->Get(finObjname.Data());
150 cout<<"Specific AliRDHFCuts not found"<<endl;
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);
159 // RDHFD0toKpi->SetName(Form("D0toKpiCuts%d",flag));
162 if(minC!=0 && maxC!=0) centr = Form("%.0f%.0f",minC,maxC);
163 else centr = Form("%.0f%.0f",RDHFD0toKpi->GetMinCentrality(),RDHFD0toKpi->GetMaxCentrality());
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
187 massD0Task->SetFillPtHistos(FillMassPt);
188 massD0Task->SetFillImpactParameterHistos(FillImpPar);
190 // massD0Task->SetRejectSDDClusters(kTRUE);
192 // massD0Task->SetWriteVariableTree(kTRUE);
194 mgr->AddTask(massD0Task);
197 // Create containers for input/output
198 AliAnalysisDataContainer *cinputmassD0 = mgr->CreateContainer(inname,TChain::Class(),
199 AliAnalysisManager::kInputContainer);
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
209 mgr->ConnectInput(massD0Task,0,mgr->GetCommonInputContainer());
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);