]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/correlationHF/macros/AddTaskDStarCorrelations.C
Adding D meson efficiency maps and Coverity fixes (Sandro)
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / macros / AddTaskDStarCorrelations.C
1  //DEFINITION OF A FEW CONSTANTS\r
2 //----------------------------------------------------\r
3 \r
4 /* $Id$ */\r
5 \r
6 AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarCorrelations::CollSyst syst,\r
7                                                                      Bool_t theMCon, Bool_t mixing, Bool_t UseReco = kTRUE, Bool_t fullmode = kFALSE ,Bool_t UseEffic = kFALSE, Bool_t UseDEffic = kFALSE ,\r
8                                                                      Int_t trackselect =1, Int_t usedispl =0, Int_t nbins, Float_t DStarSigma, Float_t D0Sigma, Float_t D0SBSigmaLow, Float_t D0SBSigmaHigh, \r
9                                                                      TString DStarCutsFile, TString TrackCutsFile,\r
10                                                                      Int_t tasknumber = 0)\r
11 {\r
12 \r
13     \r
14     //Float_t sigmasval[]={DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh};\r
15     //Float_t * sigmas = sigmasval;//new Float_t[4];\r
16     //sigma[0] = DStarSigma;\r
17     //sigma[1] = D0Sigma;\r
18     //sigma[2] = D0SBSigmaLow;\r
19     //sigma[3] = D0SBSigmaHigh;\r
20     \r
21   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
22   if (!mgr) {\r
23     ::Error(" AliAnalysisTaskDStarCorrelations", "No analysis manager to connect to.");\r
24     return NULL;\r
25   } \r
26 \r
27         cout << "==========================================================" << endl;\r
28     cout << "Set Inputs : " << endl;\r
29     cout << " " << endl;\r
30     if(syst == AliAnalysisTaskDStarCorrelations::pp) cout << "Running on pp @ 7 TeV" << endl;\r
31     if(syst == AliAnalysisTaskDStarCorrelations::pA) cout << "Running on pA @ 5.02 TeV" << endl;\r
32     if(syst == AliAnalysisTaskDStarCorrelations::AA) cout << "Running on AA @ 2.76 TeV" << endl;\r
33     \r
34     if(theMCon) cout << "Analysis on MonteCarlo" << endl;\r
35     else cout << "Analysis on Data" << endl;\r
36     \r
37     if(mixing) cout << "Analysis on Mixed Events" << endl;\r
38     else cout << "Analysis on Single Events" << endl;\r
39     \r
40     if(UseReco) cout << "Using Reconstructed objects" << endl;\r
41     else cout << "Using Pure MC information " << endl;\r
42 \r
43     if(fullmode) cout << "Running in full mode" << endl;\r
44     else cout << "Running in fast mode " << endl;\r
45     \r
46     if(UseEffic) cout << "Using single track efficiency map" << endl;\r
47     else cout << "Not Using single track efficiency map " << endl;\r
48     \r
49     if(UseDEffic) cout << "Using Dmeson efficiency map" << endl;\r
50     else cout << "Not Using Dmeson efficiency map " << endl;\r
51 \r
52     if(trackselect == 1) cout << "Correlating with hadrons" << endl;\r
53     if(trackselect == 2) cout << "Correlating with kaons" << endl;\r
54     if(trackselect == 3) cout << "Correlating with kzeros" << endl;\r
55     \r
56     if(usedispl == 0) cout << "Not using displacement cut" << endl;\r
57     if(usedispl == 1) cout << "Using absolute displacement cut" << endl;\r
58     if(usedispl == 2) cout << "Using relative displacement cut" << endl;\r
59     \r
60     \r
61     cout << "Number of bins in deltaphi = " << nbins << endl;\r
62     \r
63     cout << "N of Sigmas in D* selection =" << DStarSigma << endl;\r
64     cout << "N of Sigmas in D0 selection = " << D0Sigma << endl;\r
65     cout << "D0 Sidebands taken from  = " << D0SBSigmaLow << " - " << D0SBSigmaHigh << " sigmas " << endl; endl;\r
66     \r
67    \r
68     \r
69     cout << "DStar cut object:     " << DStarCutsFile << endl;\r
70     cout << "Tracks cut object:    " << TrackCutsFile << endl;\r
71   \r
72     \r
73     cout << "==========================================================" << endl;\r
74     //gSystem->Sleep(2000);\r
75     \r
76 //      TString DCutObjPath = "CutObjects/DStar/";\r
77                 \r
78         \r
79 // ******************************** OPENING THE D* CUTS ************************************\r
80     cout << "Getting D meson cut object from file \n" << DStarCutsFile.Data() << "\n " << endl;\r
81     TFile* filecuts=new TFile(DStarCutsFile.Data());\r
82     if(!filecuts->IsOpen()){\r
83     cout<<"DStar cut object file not found: exit"<<endl;\r
84     return;\r
85     }\r
86     \r
87     AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi();\r
88     RDHFDStartoKpipi = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");\r
89     RDHFDStartoKpipi->SetName("DStartoKpipiCuts");\r
90     \r
91     // mm let's see if everything is ok\r
92         if(!RDHFDStartoKpipi){\r
93                 cout<<"Specific AliRDHFCuts not found"<<endl;\r
94                 return;\r
95         }\r
96     \r
97         \r
98        // RDHFDStartoKpipi->SetTriggerClass("");\r
99        // RDHFDStartoKpipi->SetTriggerMask(AliVEvent::kCentral);\r
100     \r
101     \r
102         \r
103 // ******************************** OPENING THE ASSOCIATED TRACK CUTS ************************************\r
104         cout << "Getting associated track cut object from file \n" << TrackCutsFile.Data() << "\n " << endl;\r
105     TFile* filecuts2=new TFile(TrackCutsFile.Data());\r
106           if(!filecuts2->IsOpen()){\r
107                   cout<<"Track cut object file not found: exit"<<endl;\r
108                   return;\r
109     }\r
110         AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();\r
111         corrCuts = (AliHFAssociatedTrackCuts*)filecuts2->Get("AssociatedCuts");\r
112         corrCuts->SetName("AssociatedCuts");\r
113         corrCuts->PrintAll();\r
114         if(!corrCuts){\r
115                 cout<<"Specific associated track cuts not found"<<endl;\r
116                 return;\r
117         }\r
118         \r
119 \r
120 // ******************************** SELECTING THE MC PROCESS  ************************************\r
121 \r
122         TString selectMCproc = "";\r
123         \r
124         Int_t NMCevents = corrCuts->GetNofMCEventType();\r
125         for(Int_t k=0; k<NMCevents; k++){\r
126                 Int_t * MCEventType = corrCuts->GetMCEventType();\r
127                 selectMCproc += Form("%d",MCEventType[k]);\r
128         }\r
129 \r
130          cout << "Select process string = " << selectMCproc << endl;\r
131         \r
132 \r
133 \r
134 // ******************************** CREATING THE TASK ************************************\r
135  \r
136     printf("CREATE TASK \n");\r
137   // create the task\r
138   AliAnalysisTaskDStarCorrelations *task = new AliAnalysisTaskDStarCorrelations("AliAnalysisTaskDStarCorrelations",RDHFDStartoKpipi,corrCuts,syst,fullmode);\r
139         \r
140         // Setters\r
141 \r
142         if(!theMCon) {\r
143                 printf("Analysis on Data - reconstruction only!");\r
144                 UseReco = kTRUE;\r
145         }\r
146         \r
147     \r
148    // cout << "Adding efficiency map to Assoc track cut object \n" << endl;\r
149   //  if(effMap) task->SetDeffMapvsPt(effMap);\r
150   //  if(effMap2d) task->SetDeffMapvsPtvsMult(effMap2d);\r
151     \r
152     task->SetNofPhiBins(nbins);\r
153         task->SetMonteCarlo(theMCon);\r
154         task->SetUseMixing(mixing);\r
155         task->SetCorrelator(trackselect) ;\r
156         task->SetUseDisplacement(usedispl);\r
157         //task->SetCollSys(syst);\r
158         task->SetLevelOfDebug(2);\r
159         task->SetUseReconstruction(UseReco); // set kTRUE for Using Reconstruction, kFALSe for MC Truth\r
160     task->SetDMesonSigmas(DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);\r
161         //task->SetDMesonSigmas(sigmas);\r
162     //task->SetDMesonSigmas(sigmas);\r
163     task->SetUseEfficiencyCorrection(UseEffic);\r
164     task->SetUseDmesonEfficiencyCorrection(UseDEffic);\r
165         \r
166 \r
167         if(trackselect == 1) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged hadrons \n");\r
168         else if(trackselect == 2) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged kaons \n");\r
169         else if(trackselect == 3) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with reconstructed K0s \n");\r
170         else Fatal(" AliAnalysisTaskDStarCorrelations","Nothing to correlate with!");\r
171         if(mixing) Info (" AliAnalysisTaskDStarCorrelations","Event Mixing Analysis\n");\r
172         if(!mixing) Info (" AliAnalysisTaskDStarCorrelations","Single Event Analysis \n");\r
173 \r
174   // Create and connect containers for input/output\r
175         //TString dcavalue = " ";\r
176         if(!theMCon) TString contname = "Data";\r
177         if(theMCon) TString contname = "MonteCarlo";\r
178         TString contname2 = "MC";\r
179         if(trackselect ==1) TString particle = "Hadron";\r
180         if(trackselect ==2) TString particle = "Kaon";\r
181         if(trackselect ==3) TString particle = "KZero";\r
182         \r
183         TString cutname = "cuts" ;\r
184         TString cutname2 = "hadroncuts" ;\r
185         TString outputfile = AliAnalysisManager::GetCommonFileName();\r
186         TString outputfileMC = AliAnalysisManager::GetCommonFileName();\r
187         TString counter = "NormCounter";\r
188         outputfile += ":PWGHF_HFCJ_";\r
189         outputfileMC += ":PWGHF_HFCJ_";\r
190         \r
191         if(!mixing) {\r
192                 outputfile += "SE";\r
193                 outputfileMC += "SE";\r
194                 contname += "SE";\r
195                 contname2 += "SE";\r
196                 cutname += "SE";\r
197                 cutname2 += "SE";\r
198                 counter+= "SE";\r
199         }\r
200         if(mixing){\r
201                 outputfile += "ME";\r
202                 outputfileMC += "ME";\r
203                 contname += "ME";\r
204                 contname2 += "ME";\r
205                 cutname += "ME";\r
206                 cutname2 += "ME";\r
207                 counter+= "ME";\r
208         }\r
209     \r
210 \r
211     \r
212         outputfile += "Dphi_DStar";\r
213         outputfileMC += "Dphi_DStar";\r
214         outputfile += particle;\r
215         outputfileMC += particle;\r
216         cutname += particle;\r
217         cutname2 += particle;\r
218         contname += particle;\r
219         contname2 += particle;\r
220         counter+= particle;\r
221         \r
222     if(UseEffic){\r
223         outputfile += "_EffY_";\r
224                 outputfileMC += "_EffY_";\r
225                 contname += "_EffY_";\r
226                 contname2 += "_EffY_";\r
227                 cutname += "_EffY_";\r
228                 cutname2 += "_EffY_";\r
229                 counter+= "_EffY_";\r
230     }\r
231     \r
232     if(!UseEffic){\r
233         outputfile += "_EffN_";\r
234                 outputfileMC += "_EffN_";\r
235                 contname += "_EffN_";\r
236                 contname2 += "_EffN_";\r
237                 cutname += "_EffN_";\r
238                 cutname2 += "_EffN_";\r
239                 counter+= "_EffN_";\r
240     }\r
241     \r
242     if(UseDEffic){\r
243         outputfile += "DEffY_";\r
244                 outputfileMC += "DEffY_";\r
245                 contname += "DEffY_";\r
246                 contname2 += "DEffY_";\r
247                 cutname += "DEffY_";\r
248                 cutname2 += "DEffY_";\r
249                 counter+= "DEffY_";\r
250     }\r
251     \r
252     if(!UseDEffic){\r
253         outputfile += "DEffN_";\r
254                 outputfileMC += "DEffN_";\r
255                 contname += "DEffN_";\r
256                 contname2 += "DEffN_";\r
257                 cutname += "DEffN_";\r
258                 cutname2 += "DEffN_";\r
259                 counter+= "DEffN_";\r
260     }\r
261         \r
262     \r
263     outputfile += Form("%d_bins_",nbins);\r
264         outputfileMC += Form("%d_bins_",nbins);\r
265         cutname += Form("%d_bins_",nbins);\r
266         cutname2 += Form("%d_bins_",nbins);\r
267         contname += Form("%d_bins_",nbins);\r
268         contname2 += Form("%d_bins_",nbins);\r
269         counter+= Form("%d_bins_",nbins);\r
270     \r
271         \r
272         outputfile += Form("task_%d",tasknumber);\r
273         outputfileMC += Form("task_%d",tasknumber);\r
274         cutname += Form("task_%d",tasknumber);\r
275         cutname2 += Form("task_%d",tasknumber);\r
276         contname += Form("task_%d",tasknumber);\r
277         contname2 += Form("task_%d",tasknumber);\r
278         counter+= Form("task_%d",tasknumber);\r
279         \r
280 /*      outputfile += TrackCutObjNamePrefix;\r
281         outputfileMC += TrackCutObjNamePrefix;\r
282         cutname += TrackCutObjNamePrefix;\r
283         cutname2 += TrackCutObjNamePrefix;\r
284         contname += TrackCutObjNamePrefix;\r
285         contname2 += TrackCutObjNamePrefix;\r
286         counter+= TrackCutObjNamePrefix;\r
287 */      \r
288         outputfile += selectMCproc;\r
289         outputfileMC += selectMCproc;\r
290         cutname += selectMCproc;\r
291         cutname2 += selectMCproc;\r
292         contname += selectMCproc;\r
293         contname2 += selectMCproc;\r
294         counter+= selectMCproc;\r
295         \r
296         TString reco = "";\r
297         \r
298         if(UseReco) reco = "_reco";\r
299         if(!UseReco) reco = "_MCTruth";\r
300         \r
301         outputfile += reco;\r
302         outputfileMC += reco;\r
303         cutname += reco;\r
304         cutname2 += reco;\r
305         contname += reco;\r
306         contname2 += reco;\r
307         counter+= reco;\r
308         \r
309         TString nsigma = Form("_%.0f_%.0f%.0f%.0f_sigmas",DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);\r
310         \r
311         //cout << "nsigma string = "<< nsigma << endl;\r
312         \r
313         outputfile += nsigma;\r
314         outputfileMC += nsigma;\r
315         cutname += nsigma;\r
316         cutname2 += nsigma;\r
317         contname += nsigma;\r
318         contname2 += nsigma;\r
319         counter+= nsigma;\r
320         \r
321         \r
322         cout << contname << endl;\r
323         cout << contname2 << endl;\r
324         cout << cutname << endl;\r
325         cout << cutname2 << endl;\r
326         cout << counter << endl;\r
327         cout << outputfile << endl;\r
328         //return;\r
329         \r
330   mgr->AddTask(task);\r
331   // ------ input data ------\r
332   AliAnalysisDataContainer *cinput0  = mgr->GetCommonInputContainer();\r
333   \r
334   // ----- output data -----\r
335   \r
336   // output TH1I for event counting\r
337         \r
338         //TLists\r
339   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());\r
340   AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contname2, TList::Class(),AliAnalysisManager::kOutputContainer,outputfileMC.Data());\r
341    // Cut Objects\r
342   AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(cutname,AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts D\r
343   AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(cutname2,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts tracks\r
344    // Normalization Counter\r
345   AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(counter,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());\r
346   \r
347         \r
348   mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());\r
349   mgr->ConnectOutput(task,1,coutput1);\r
350   mgr->ConnectOutput(task,2,coutput2);\r
351   mgr->ConnectOutput(task,3,coutput3);\r
352   mgr->ConnectOutput(task,4,coutput4);\r
353   mgr->ConnectOutput(task,5,coutput5);\r
354 \r
355   return task ;\r
356 \r
357 }\r
358 \r