1 //DEFINITION OF A FEW CONSTANTS
\r
2 //----------------------------------------------------
\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
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
21 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
\r
23 ::Error(" AliAnalysisTaskDStarCorrelations", "No analysis manager to connect to.");
\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
34 if(theMCon) cout << "Analysis on MonteCarlo" << endl;
\r
35 else cout << "Analysis on Data" << endl;
\r
37 if(mixing) cout << "Analysis on Mixed Events" << endl;
\r
38 else cout << "Analysis on Single Events" << endl;
\r
40 if(UseReco) cout << "Using Reconstructed objects" << endl;
\r
41 else cout << "Using Pure MC information " << endl;
\r
43 if(fullmode) cout << "Running in full mode" << endl;
\r
44 else cout << "Running in fast mode " << endl;
\r
46 if(UseEffic) cout << "Using single track efficiency map" << endl;
\r
47 else cout << "Not Using single track efficiency map " << endl;
\r
49 if(UseDEffic) cout << "Using Dmeson efficiency map" << endl;
\r
50 else cout << "Not Using Dmeson efficiency map " << endl;
\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
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
61 cout << "Number of bins in deltaphi = " << nbins << endl;
\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
69 cout << "DStar cut object: " << DStarCutsFile << endl;
\r
70 cout << "Tracks cut object: " << TrackCutsFile << endl;
\r
73 cout << "==========================================================" << endl;
\r
74 //gSystem->Sleep(2000);
\r
76 // TString DCutObjPath = "CutObjects/DStar/";
\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
87 AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi();
\r
88 RDHFDStartoKpipi = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
\r
89 RDHFDStartoKpipi->SetName("DStartoKpipiCuts");
\r
91 // mm let's see if everything is ok
\r
92 if(!RDHFDStartoKpipi){
\r
93 cout<<"Specific AliRDHFCuts not found"<<endl;
\r
98 // RDHFDStartoKpipi->SetTriggerClass("");
\r
99 // RDHFDStartoKpipi->SetTriggerMask(AliVEvent::kCentral);
\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
110 AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();
\r
111 corrCuts = (AliHFAssociatedTrackCuts*)filecuts2->Get("AssociatedCuts");
\r
112 corrCuts->SetName("AssociatedCuts");
\r
113 corrCuts->PrintAll();
\r
115 cout<<"Specific associated track cuts not found"<<endl;
\r
120 // ******************************** SELECTING THE MC PROCESS ************************************
\r
122 TString selectMCproc = "";
\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
130 cout << "Select process string = " << selectMCproc << endl;
\r
134 // ******************************** CREATING THE TASK ************************************
\r
136 printf("CREATE TASK \n");
\r
138 AliAnalysisTaskDStarCorrelations *task = new AliAnalysisTaskDStarCorrelations("AliAnalysisTaskDStarCorrelations",RDHFDStartoKpipi,corrCuts,syst,fullmode);
\r
143 printf("Analysis on Data - reconstruction only!");
\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
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
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
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
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
192 outputfile += "SE";
\r
193 outputfileMC += "SE";
\r
201 outputfile += "ME";
\r
202 outputfileMC += "ME";
\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
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
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
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
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
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
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
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
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
298 if(UseReco) reco = "_reco";
\r
299 if(!UseReco) reco = "_MCTruth";
\r
301 outputfile += reco;
\r
302 outputfileMC += reco;
\r
309 TString nsigma = Form("_%.0f_%.0f%.0f%.0f_sigmas",DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
\r
311 //cout << "nsigma string = "<< nsigma << endl;
\r
313 outputfile += nsigma;
\r
314 outputfileMC += nsigma;
\r
316 cutname2 += nsigma;
\r
317 contname += nsigma;
\r
318 contname2 += nsigma;
\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
330 mgr->AddTask(task);
\r
331 // ------ input data ------
\r
332 AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
\r
334 // ----- output data -----
\r
336 // output TH1I for event counting
\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
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
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