1 //DEFINITION OF A FEW CONSTANTS
2 //----------------------------------------------------
6 AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarCorrelations::CollSyst syst,
7 Bool_t theMCon, Bool_t mixing, Bool_t UseReco=kTRUE,Bool_t UseHadChannelinMC,Bool_t fullmode = kFALSE,Bool_t UseEffic=kFALSE,Bool_t UseDEffic = kFALSE,
8 AliAnalysisTaskDStarCorrelations::DEffVariable var,
9 Int_t trackselect =1, Int_t usedispl =0, Int_t nbins, Float_t DStarSigma, Float_t D0Sigma, Float_t D0SBSigmaLow, Float_t D0SBSigmaHigh, Float_t eta,
10 TString DStarCutsFile, TString TrackCutsFile,
16 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
18 ::Error(" AliAnalysisTaskDStarCorrelations", "No analysis manager to connect to.");
22 cout << "==========================================================" << endl;
23 cout << "Set Inputs : " << endl;
25 if(syst == AliAnalysisTaskDStarCorrelations::pp) cout << "Running on pp @ 7 TeV" << endl;
26 if(syst == AliAnalysisTaskDStarCorrelations::pA) cout << "Running on pPb @ 5.02 TeV" << endl;
27 if(syst == AliAnalysisTaskDStarCorrelations::AA) cout << "Running on PbPb @ 2.76 TeV" << endl;
29 if(theMCon) cout << "Analysis on MonteCarlo" << endl;
30 else cout << "Analysis on Data" << endl;
32 if(mixing) cout << "Analysis on Mixed Events" << endl;
33 else cout << "Analysis on Single Events" << endl;
35 if(UseReco) cout << "Using Reconstructed objects" << endl;
36 else cout << "Using Pure MC information " << endl;
38 if(fullmode) cout << "Running in full mode" << endl;
39 else cout << "Running in fast mode " << endl;
41 if(UseEffic) cout << "Using single track efficiency map" << endl;
42 else cout << "Not Using single track efficiency map " << endl;
44 if(UseDEffic) cout << "Using Dmeson efficiency map" << endl;
45 else cout << "Not Using Dmeson efficiency map " << endl;
48 if(var == AliAnalysisTaskDStarCorrelations::kNone) cout << "Applying D Efficiency map vs pT " << endl;
49 if(var == AliAnalysisTaskDStarCorrelations::kMult) cout << "Applying D Efficiency map vs pT vs Multiplicity" << endl;
50 if(var == AliAnalysisTaskDStarCorrelations::kCentr) cout << "Applying D Efficiency map vs pT vs Centrality" << endl;
51 if(var == AliAnalysisTaskDStarCorrelations::kRapidity) cout << "Applying D Efficiency map vs pT vs Rapidity" << endl;
52 if(var == AliAnalysisTaskDStarCorrelations::kEta) cout << "Applying D Efficiency map vs pT vs Eta" << endl;
54 if(trackselect == 1) cout << "Correlating with hadrons" << endl;
55 if(trackselect == 2) cout << "Correlating with kaons" << endl;
56 if(trackselect == 3) cout << "Correlating with kzeros" << endl;
58 if(usedispl == 0) cout << "Not using displacement cut" << endl;
59 if(usedispl == 1) cout << "Using absolute displacement cut" << endl;
60 if(usedispl == 2) cout << "Using relative displacement cut" << endl;
63 cout << "Number of bins in deltaphi = " << nbins << endl;
65 cout << "N of Sigmas in D* selection =" << DStarSigma << endl;
66 cout << "N of Sigmas in D0 selection = " << D0Sigma << endl;
67 cout << "D0 Sidebands taken from = " << D0SBSigmaLow << " - " << D0SBSigmaHigh << " sigmas " << endl; endl;
71 cout << "DStar cut object: " << DStarCutsFile << endl;
72 cout << "Tracks cut object: " << TrackCutsFile << endl;
75 cout << "==========================================================" << endl;
76 //gSystem->Sleep(2000);
78 // TString DCutObjPath = "CutObjects/DStar/";
81 // ******************************** OPENING THE D* CUTS ************************************
82 cout << "Getting D meson cut object from file \n" << DStarCutsFile.Data() << "\n " << endl;
83 TFile* filecuts=TFile::Open(DStarCutsFile.Data());
84 if(!filecuts->IsOpen()){
85 cout<<"DStar cut object file not found: exit"<<endl;
89 AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi();
90 RDHFDStartoKpipi = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
91 RDHFDStartoKpipi->SetName("DStartoKpipiCuts");
93 // mm let's see if everything is ok
94 if(!RDHFDStartoKpipi){
95 cout<<"Specific AliRDHFCuts not found"<<endl;
100 // RDHFDStartoKpipi->SetTriggerClass("");
101 // RDHFDStartoKpipi->SetTriggerMask(AliVEvent::kCentral);
105 // ******************************** OPENING THE ASSOCIATED TRACK CUTS ************************************
106 cout << "Getting associated track cut object from file \n" << TrackCutsFile.Data() << "\n " << endl;
107 TFile* filecuts2=TFile::Open(TrackCutsFile.Data());
108 if(!filecuts2->IsOpen()){
109 cout<<"Track cut object file not found: exit"<<endl;
112 AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();
113 corrCuts = (AliHFAssociatedTrackCuts*)filecuts2->Get("AssociatedCuts");
114 corrCuts->SetName("AssociatedCuts");
115 corrCuts->PrintAll();
117 cout<<"Specific associated track cuts not found"<<endl;
122 // ******************************** SELECTING THE MC PROCESS ************************************
124 TString selectMCproc = "";
126 Int_t NMCevents = corrCuts->GetNofMCEventType();
127 for(Int_t k=0; k<NMCevents; k++){
128 Int_t * MCEventType = corrCuts->GetMCEventType();
129 selectMCproc += Form("%d",MCEventType[k]);
132 cout << "Select process string = " << selectMCproc << endl;
136 // ******************************** CREATING THE TASK ************************************
138 printf("CREATE TASK \n");
140 AliAnalysisTaskDStarCorrelations *task = new AliAnalysisTaskDStarCorrelations("AliAnalysisTaskDStarCorrelations",RDHFDStartoKpipi,corrCuts,syst,fullmode);
145 printf("Analysis on Data - reconstruction only!");
147 printf("Analysis on Data - hadronic channel only!");
148 UseHadChannelinMC = kFALSE;
155 task->SetNofPhiBins(nbins);
156 task->SetMonteCarlo(theMCon);
157 task->SetUseMixing(mixing);
158 task->SetCorrelator(trackselect) ;
159 task->SetUseDisplacement(usedispl);
160 //task->SetCollSys(syst);
161 task->SetLevelOfDebug(2);
162 task->SetUseReconstruction(UseReco); // set kTRUE for Using Reconstruction, kFALSe for MC Truth
163 task->SetDMesonSigmas(DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
164 //task->SetDMesonSigmas(sigmas);
165 //task->SetDMesonSigmas(sigmas);
166 task->SetUseEfficiencyCorrection(UseEffic);
167 task->SetUseDmesonEfficiencyCorrection(UseDEffic);
169 task->SetEfficiencyVariable(var);
170 task->SetMaxDStarEta(eta);
171 task->SetUseHadronicChannelAtKineLevel(UseHadChannelinMC);
174 if(trackselect == 1) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged hadrons \n");
175 else if(trackselect == 2) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged kaons \n");
176 else if(trackselect == 3) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with reconstructed K0s \n");
177 else Fatal(" AliAnalysisTaskDStarCorrelations","Nothing to correlate with!");
178 if(mixing) Info (" AliAnalysisTaskDStarCorrelations","Event Mixing Analysis\n");
179 if(!mixing) Info (" AliAnalysisTaskDStarCorrelations","Single Event Analysis \n");
181 // Create and connect containers for input/output
182 //TString dcavalue = " ";
183 if(!theMCon) TString contname = "Data";
184 if(theMCon) TString contname = "MonteCarlo";
185 TString contname2 = "MC";
186 if(trackselect ==1) TString particle = "Hadron";
187 if(trackselect ==2) TString particle = "Kaon";
188 if(trackselect ==3) TString particle = "KZero";
190 TString cutname = "cuts" ;
191 TString cutname2 = "hadroncuts" ;
192 TString outputfile = AliAnalysisManager::GetCommonFileName();
193 TString outputfileMC = AliAnalysisManager::GetCommonFileName();
194 TString counter = "NormCounter";
195 outputfile += ":PWGHF_HFCJ_";
196 outputfileMC += ":PWGHF_HFCJ_";
200 outputfileMC += "SE";
209 outputfileMC += "ME";
219 outputfile += "Dphi_DStar";
220 outputfileMC += "Dphi_DStar";
221 outputfile += particle;
222 outputfileMC += particle;
224 cutname2 += particle;
225 contname += particle;
226 contname2 += particle;
230 outputfile += "_EffY_";
231 outputfileMC += "_EffY_";
232 contname += "_EffY_";
233 contname2 += "_EffY_";
235 cutname2 += "_EffY_";
240 outputfile += "_EffN_";
241 outputfileMC += "_EffN_";
242 contname += "_EffN_";
243 contname2 += "_EffN_";
245 cutname2 += "_EffN_";
250 TString string = "DEffY_";
252 if(var == AliAnalysisTaskDStarCorrelations::kNone) string += "vsPt_";
253 if(var == AliAnalysisTaskDStarCorrelations::kMult) string += "vsPtMult_";
254 if(var == AliAnalysisTaskDStarCorrelations::kCentr) string += "vsPCentrt_";
255 if(var == AliAnalysisTaskDStarCorrelations::kRapidity) string += "vsPtY_";
256 if(var == AliAnalysisTaskDStarCorrelations::kEta) string += "vsPtEta_";
258 outputfile += string;
259 outputfileMC += string;
268 outputfile += "DEffN_";
269 outputfileMC += "DEffN_";
270 contname += "DEffN_";
271 contname2 += "DEffN_";
273 cutname2 += "DEffN_";
278 outputfile += Form("%d_bins_",nbins);
279 outputfileMC += Form("%d_bins_",nbins);
280 cutname += Form("%d_bins_",nbins);
281 cutname2 += Form("%d_bins_",nbins);
282 contname += Form("%d_bins_",nbins);
283 contname2 += Form("%d_bins_",nbins);
284 counter+= Form("%d_bins_",nbins);
287 outputfile += Form("task_%d",tasknumber);
288 outputfileMC += Form("task_%d",tasknumber);
289 cutname += Form("task_%d",tasknumber);
290 cutname2 += Form("task_%d",tasknumber);
291 contname += Form("task_%d",tasknumber);
292 contname2 += Form("task_%d",tasknumber);
293 counter+= Form("task_%d",tasknumber);
295 /* outputfile += TrackCutObjNamePrefix;
296 outputfileMC += TrackCutObjNamePrefix;
297 cutname += TrackCutObjNamePrefix;
298 cutname2 += TrackCutObjNamePrefix;
299 contname += TrackCutObjNamePrefix;
300 contname2 += TrackCutObjNamePrefix;
301 counter+= TrackCutObjNamePrefix;
303 outputfile += selectMCproc;
304 outputfileMC += selectMCproc;
305 cutname += selectMCproc;
306 cutname2 += selectMCproc;
307 contname += selectMCproc;
308 contname2 += selectMCproc;
309 counter+= selectMCproc;
313 if(UseReco) reco = "_reco";
315 if(UseHadChannelinMC) reco = "_MCTruthHadChan";
316 if(!UseHadChannelinMC) reco = "_MCTruthAllChan";
319 outputfileMC += reco;
326 TString nsigma = Form("_%.0f_%.0f%.0f%.0f_sigmas",DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
328 //cout << "nsigma string = "<< nsigma << endl;
330 outputfile += nsigma;
331 outputfileMC += nsigma;
339 cout << contname << endl;
340 cout << contname2 << endl;
341 cout << cutname << endl;
342 cout << cutname2 << endl;
343 cout << counter << endl;
344 cout << outputfile << endl;
348 // ------ input data ------
349 AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
351 // ----- output data -----
353 // output TH1I for event counting
356 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
357 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contname2, TList::Class(),AliAnalysisManager::kOutputContainer,outputfileMC.Data());
359 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(cutname,AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts D
360 AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(cutname2,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts tracks
361 // Normalization Counter
362 AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(counter,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());
365 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
366 mgr->ConnectOutput(task,1,coutput1);
367 mgr->ConnectOutput(task,2,coutput2);
368 mgr->ConnectOutput(task,3,coutput3);
369 mgr->ConnectOutput(task,4,coutput4);
370 mgr->ConnectOutput(task,5,coutput5);