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, Bool_t useDStarSidebands = 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;
154 task->SetNofPhiBins(nbins);
155 task->SetMonteCarlo(theMCon);
156 task->SetUseMixing(mixing);
157 task->SetCorrelator(trackselect) ;
158 task->SetUseDisplacement(usedispl);
159 //task->SetCollSys(syst);
160 task->SetLevelOfDebug(2);
161 task->SetUseReconstruction(UseReco); // set kTRUE for Using Reconstruction, kFALSe for MC Truth
162 task->SetDMesonSigmas(DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
163 //task->SetDMesonSigmas(sigmas);
164 //task->SetDMesonSigmas(sigmas);
165 task->SetUseEfficiencyCorrection(UseEffic);
166 task->SetUseDmesonEfficiencyCorrection(UseDEffic);
168 task->SetEfficiencyVariable(var);
169 task->SetMaxDStarEta(eta);
170 task->SetUseHadronicChannelAtKineLevel(UseHadChannelinMC);
171 if(useDStarSidebands)task->SetBkgEstimationMethod(AliAnalysisTaskDStarCorrelations::kDStarSB);
172 if(!useDStarSidebands)task->SetBkgEstimationMethod(AliAnalysisTaskDStarCorrelations::kDZeroSB);
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 = " ";
184 TString contname1 = "OutputEvent";
185 TString contname2 = "OutputDmeson";
186 TString contname3 = "OutputTracks";
187 TString contname4 = "OutputEventMixing";
188 TString contname5 = "OutputCorrelations";
189 TString contname6 = "OutputMC";
190 TString counter = "NormCounter";
191 TString cutname1 = "Dcuts" ;
192 TString cutname2 = "hadroncuts" ;
210 //if(!theMCon) TString contname = "Data";
211 //if(theMCon) TString contname = "MonteCarlo";
212 //TString contname2 = "MC";
213 //if(trackselect ==1) TString particle = "Hadron";
214 //if(trackselect ==2) TString particle = "Kaon";
215 //if(trackselect ==3) TString particle = "KZero";
218 TString outputfile = AliAnalysisManager::GetCommonFileName();
219 //TString outputfileMC = AliAnalysisManager::GetCommonFileName();
220 //TString counter = "NormCounter";
221 outputfile += ":PWGHF_HFCJ_";
222 //outputfileMC += ":PWGHF_HFCJ_";
226 //outputfileMC += "SE";
239 //outputfileMC += "ME";
245 /*outputfile += "Dphi_DStar";
246 //outputfileMC += "Dphi_DStar";
247 outputfile += particle;
248 //outputfileMC += particle;
251 outputfile += "_EffY_";
252 //outputfileMC += "_EffY_";
257 outputfile += "_EffN_";
258 //outputfileMC += "_EffN_";
263 TString string = "DEffY_";
265 if(var == AliAnalysisTaskDStarCorrelations::kNone) string += "vsPt_";
266 if(var == AliAnalysisTaskDStarCorrelations::kMult) string += "vsPtMult_";
267 if(var == AliAnalysisTaskDStarCorrelations::kCentr) string += "vsPCentrt_";
268 if(var == AliAnalysisTaskDStarCorrelations::kRapidity) string += "vsPtY_";
269 if(var == AliAnalysisTaskDStarCorrelations::kEta) string += "vsPtEta_";
271 outputfile += string;
272 //outputfileMC += string;
277 outputfile += "DEffN_";
278 //outputfileMC += "DEffN_";
283 outputfile += Form("%d_bins_",nbins);
284 //outputfileMC += Form("%d_bins_",nbins);
288 outputfile += suffix;
289 //outputfileMC += Form("task_%d",tasknumber);
292 /* outputfile += TrackCutObjNamePrefix;
293 //outputfileMC += TrackCutObjNamePrefix;
294 cutname += TrackCutObjNamePrefix;
295 cutname2 += TrackCutObjNamePrefix;
296 contname += TrackCutObjNamePrefix;
297 contname2 += TrackCutObjNamePrefix;
298 counter+= TrackCutObjNamePrefix;
300 outputfile += selectMCproc;
301 //outputfileMC += selectMCproc;
306 if(UseReco) reco = "_reco";
308 if(UseHadChannelinMC) reco = "_MCTruthHadChan";
309 if(!UseHadChannelinMC) reco = "_MCTruthAllChan";
312 //outputfileMC += reco;
315 TString nsigma = Form("_%.0f_%.0f%.0f%.0f_sigmas",DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
317 //cout << "nsigma string = "<< nsigma << endl;
319 outputfile += nsigma;
320 //outputfileMC += nsigma;
324 cout << contname << endl;
325 cout << contname2 << endl;
326 cout << cutname << endl;
327 cout << cutname2 << endl;
328 cout << counter << endl;
329 cout << outputfile << endl;*/
333 // ------ input data ------
334 AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
336 // ----- output data -----
338 // output TH1I for event counting
341 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname1, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
342 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contname2, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
343 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(contname3, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
344 AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(contname4, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
345 AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(contname5, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
346 AliAnalysisDataContainer *coutput6 = mgr->CreateContainer(contname6, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
347 // Normalization Counter
348 AliAnalysisDataContainer *coutput7 = mgr->CreateContainer(counter,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());
350 AliAnalysisDataContainer *coutput8 = mgr->CreateContainer(cutname1,AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts D
351 AliAnalysisDataContainer *coutput9 = mgr->CreateContainer(cutname2,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts tracks
355 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
356 mgr->ConnectOutput(task,1,coutput1);
357 mgr->ConnectOutput(task,2,coutput2);
358 mgr->ConnectOutput(task,3,coutput3);
359 mgr->ConnectOutput(task,4,coutput4);
360 mgr->ConnectOutput(task,5,coutput5);
361 mgr->ConnectOutput(task,6,coutput6);
362 mgr->ConnectOutput(task,7,coutput7);
363 mgr->ConnectOutput(task,8,coutput8);
364 mgr->ConnectOutput(task,9,coutput9);