]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/macros/AddTaskPartCorrM.C
Add the efficiency estimation to common FF task.
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskPartCorrM.C
CommitLineData
8e3bc7b6 1AliAnalysisTaskParticleCorrelationM *AddTaskPartCorrM(TString data, TString calorimeter, Bool_t kPrintSettings = kFALSE,Bool_t kSimulation = kFALSE,Bool_t outputAOD=kFALSE, Bool_t oldAOD=kFALSE)
2{
3 // Creates a PartCorr task, configures it and adds it to the analysis manager.
4
5 // Get the pointer to the existing analysis manager via the static access method.
6 //==============================================================================
7 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
8 if (!mgr) {
9 ::Error("AddTaskPartCorr", "No analysis manager to connect to.");
10 return NULL;
11 }
12
13 // Check the analysis type using the event handlers connected to the analysis manager.
14 //==============================================================================
15 if (!mgr->GetInputEventHandler()) {
16 ::Error("AddTaskPartCorr", "This task requires an input event handler");
17 return NULL;
18 }
19 TString inputDataType = "AOD";
20 if(!data.Contains("delta"))
21 inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
22 //cout<<"DATA TYPE :: "<<inputDataType<<endl;
23 // inputDataType: data managed by the input handler
24 // data: can be same as one managed by input handler, or the output AOD created by the filter. By default use AOD
25
26 Bool_t kUseKinematics = kFALSE;
27 if(kSimulation) {
28 kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
29 if (!kUseKinematics && data=="AOD" && inputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ...
30 }
31
32 cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
33
34 // Configure analysis
35 //===========================================================================
36
37 // *** Reader ***
38 AliCaloTrackReader * reader = ;
39 if(data.Contains("AOD")) reader = new AliCaloTrackAODReader();
40 else if(data=="ESD") reader = new AliCaloTrackESDReader();
41 else if(data=="MC" && inputDataType == "ESD") reader = new AliCaloTrackMCReader();
42 reader->SetDebug(-1);//10 for lots of messages
43 reader->SwitchOnCTS();
44 //reader->SetDeltaAODFileName("");
45 //if(!kSimulation) reader->SetFiredTriggerClassName("CINT1B-ABCE-NOPF-ALL");
46 if(calorimeter == "EMCAL") {
47 reader->SwitchOnEMCALCells();
48 reader->SwitchOnEMCAL();
49 }
50 if(calorimeter == "PHOS") {
51 reader->SwitchOnPHOSCells();
52 reader->SwitchOnPHOS();
53 }
54
55 // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
56 if(data.Contains("delta")){
57 reader->SwitchOffEMCAL();
58 reader->SwitchOffPHOS();
59 reader->SwitchOffEMCALCells();
60 reader->SwitchOffPHOSCells();
61 }
62
63 if(kUseKinematics){
64 if(inputDataType == "ESD"){
65 reader->SwitchOnStack();
66 reader->SwitchOffAODMCParticles();
67 }
68 else if(inputDataType == "AOD"){
69 reader->SwitchOffStack();
70 reader->SwitchOnAODMCParticles();
71 }
72 }
73
74 //Min particle pT
75 reader->SetEMCALPtMin(0.1);
76 reader->SetPHOSPtMin(0.);
77 reader->SetCTSPtMin(0.);
78 if(outputAOD) reader->SwitchOnWriteDeltaAOD() ;
79 if(oldAOD) reader->SwitchOnOldAODs();
80 if(kPrintSettings) reader->Print("");
81
82 // *** Calorimeters Utils ***
83 AliCalorimeterUtils *cu = new AliCalorimeterUtils;
84 // Remove clusters close to borders, at least max energy cell is 1 cell away
85 cu->SetNumberOfCellsFromEMCALBorder(1);
86 cu->SetNumberOfCellsFromPHOSBorder(2);
87 cu->SwitchOnNoFiducialBorderInEMCALEta0();
88
89 // Remove EMCAL hottest channels for first LHC10 periods
90 cu->SwitchOnBadChannelsRemoval();
91 // SM0
92 cu->SetEMCALChannelStatus(0,3,13); cu->SetEMCALChannelStatus(0,44,1); cu->SetEMCALChannelStatus(0,3,13);
93 cu->SetEMCALChannelStatus(0,20,7); cu->SetEMCALChannelStatus(0,38,2);
94 // SM1
95 cu->SetEMCALChannelStatus(1,4,7); cu->SetEMCALChannelStatus(1,4,13); cu->SetEMCALChannelStatus(1,9,20);
96 cu->SetEMCALChannelStatus(1,14,15); cu->SetEMCALChannelStatus(1,23,16); cu->SetEMCALChannelStatus(1,32,23);
97 cu->SetEMCALChannelStatus(1,37,5); cu->SetEMCALChannelStatus(1,40,1); cu->SetEMCALChannelStatus(1,40,2);
98 cu->SetEMCALChannelStatus(1,40,5); cu->SetEMCALChannelStatus(1,41,0); cu->SetEMCALChannelStatus(1,41,1);
99 cu->SetEMCALChannelStatus(1,41,2); cu->SetEMCALChannelStatus(1,41,4);
100 // SM2
101 cu->SetEMCALChannelStatus(2,14,15); cu->SetEMCALChannelStatus(2,18,16); cu->SetEMCALChannelStatus(2,18,17);
102 cu->SetEMCALChannelStatus(2,18,18); cu->SetEMCALChannelStatus(2,18,20); cu->SetEMCALChannelStatus(2,18,21);
103 cu->SetEMCALChannelStatus(2,18,23); cu->SetEMCALChannelStatus(2,19,16); cu->SetEMCALChannelStatus(2,19,17);
104 cu->SetEMCALChannelStatus(2,19,19); cu->SetEMCALChannelStatus(2,19,20); cu->SetEMCALChannelStatus(2,19,21);
105 cu->SetEMCALChannelStatus(2,19,22);
106 //SM3
107 cu->SetEMCALChannelStatus(3,4,7);
108
109
110 //Recalibration
111 //cu->SwitchOnRecalibration();
112 //TFile * f = new TFile("RecalibrationFactors.root","read");
113 //cu->SetEMCALChannelRecalibrationFactors(0,(TH2F*)f->Get("EMCALRecalFactors_SM0"));
114 //cu->SetEMCALChannelRecalibrationFactors(1,(TH2F*)f->Get("EMCALRecalFactors_SM1"));
115 //cu->SetEMCALChannelRecalibrationFactors(2,(TH2F*)f->Get("EMCALRecalFactors_SM2"));
116 //cu->SetEMCALChannelRecalibrationFactors(3,(TH2F*)f->Get("EMCALRecalFactors_SM3"));
117 //f->Close();
118
119 cu->SetDebug(-1);
120 if(kPrintSettings) cu->Print("");
121
122
123 // ##### Analysis algorithm settings ####
124
125 // -------------------------------------------------
126 // --- Photon/Pi0/Omega/Electron Analysis ---
127 // -------------------------------------------------
128
129 AliAnaPhoton *anaphoton = new AliAnaPhoton();
130 anaphoton->SetDebug(-1); //10 for lots of messages
131 if(calorimeter == "PHOS"){
132 anaphoton->SetNCellCut(1);// At least 2 cells
133 anaphoton->SetMinPt(0.2);
134 anaphoton->SetMinDistanceToBadChannel(2, 4, 5);
135 }
136 else {//EMCAL
137 //anaphoton->SetNCellCut(0);// At least 2 cells
138 anaphoton->SetMinPt(0.1); // no effect minium EMCAL cut.
139 if(kUseKinematics) anaphoton->SetTimeCut(525,725);// Time window of [550-750] ns
140 anaphoton->SetMinDistanceToBadChannel(6, 12, 18);
141 }
142 anaphoton->SetCalorimeter(calorimeter);
143 if(kUseKinematics) anaphoton->SwitchOnDataMC() ;//Access MC stack and fill more histograms
144 else anaphoton->SwitchOffDataMC() ;
145 anaphoton->SwitchOffCaloPID();
146 anaphoton->SwitchOffFiducialCut();
147 if(kSimulation){
148 anaphoton->SwitchOnFiducialCut();
149 AliFiducialCut * fidCut1stYear = anaphoton->GetFidutialCut();
150 fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
151 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
152 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
153 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
154 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
155 }
156
157 if(!data.Contains("delta")) {
158 anaphoton->SetOutputAODName(Form("Photons%s",calorimeter.Data()));
159 anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
160 }
161 else anaphoton->SetInputAODName(Form("Photons%s",calorimeter.Data()));
162 anaphoton->AddToHistogramsName("AnaPhotonCorr_");
163 //Set Histograms bins and ranges
164 anaphoton->SetHistoPtRangeAndNBins(0, 50, 200) ;
165 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
166 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
167 if(kPrintSettings) anaphoton->Print("");
168
169 // -----------------------------------
170 // --- Pi0 Invariant Mass Analysis ---
171 // -----------------------------------
172
173 AliAnaPi0 *anapi0 = new AliAnaPi0();
174 anapi0->SetDebug(-1);//10 for lots of messages
175 anapi0->SetInputAODName(Form("Photons%s",calorimeter.Data()));
176 anapi0->SetCalorimeter(calorimeter);
177 if(kSimulation){
178 anapi0->SwitchOnFiducialCut();
179 AliFiducialCut * fidCut1stYear = anapi0->GetFiducialCut();
180 fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
181 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
182 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
183 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
184 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
185 }
186
187 anapi0->SetNPID(1); //Available from tag AliRoot::v4-18-15-AN
188 //settings for pp collision
189 anapi0->SetNCentrBin(1);
190 anapi0->SetNZvertBin(1);
191 anapi0->SetNRPBin(1);
192 anapi0->SetNMaxEvMix(10);
193 anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
194 if(calorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
195 else anapi0->SetNumberOfModules(4); //EMCAL first year
196 anapi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
197 //anapi0->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
198 //anapi0->SetHistoEtaRangeAndNBins(-0.8, 0.8, 200) ;
199 anapi0->SetHistoMassRangeAndNBins(0., 0.6, 200) ;
200 anapi0->SetHistoAsymmetryRangeAndNBins(0., 1. , 10) ;
201 if(kPrintSettings) anapi0->Print("");
202
203 //---------------------------
204 //Pi0, event by event
205 //---------------------------
206
207
208 AliAnaPi0EbE *anapi0ebe = new AliAnaPi0EbE();
209 anapi0ebe->SetDebug(-1);//10 for lots of messages
210 anapi0ebe->SetAnalysisType(AliAnaPi0EbE::kIMCalo);
211 anapi0ebe->SetMinPt(0);
212 anapi0ebe->SetCalorimeter(calorimeter);
213 anapi0ebe->SetInputAODName(Form("Photons%s",calorimeter.Data()));
214 if(!data.Contains("delta")) {
215 anapi0ebe->SetOutputAODName(Form("Pi0s%s",calorimeter.Data()));
216 anapi0ebe->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
217 }
218 else anapi0ebe->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
219
220 if(kUseKinematics) anapi0ebe->SwitchOnDataMC() ;//Access MC stack and fill more histograms
221 else anapi0ebe->SwitchOffDataMC() ;
222
223 AliNeutralMesonSelection *nms = anapi0ebe->GetNeutralMesonSelection();
224 nms->SetInvMassCutRange(0.05, 0.2) ;
225 nms->KeepNeutralMesonSelectionHistos(kTRUE);
226 //Set Histrograms bins and ranges
227 nms->SetHistoERangeAndNBins(0, 50, 200) ;
228 // nms->SetHistoPtRangeAndNBins(0, 50, 100) ;
229 // nms->SetHistoAngleRangeAndNBins(0, 0.3, 100) ;
230 // nsm->SetHistoIMRangeAndNBins(0, 0.4, 100) ;
231 //Set Histrograms bins and ranges
232 anapi0ebe->SetHistoPtRangeAndNBins(0, 50, 200) ;
233 // anapi0->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
234 // anapi0->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
235 if(kPrintSettings) anapi0ebe->Print("");
236
237 //-------------------------------------
238 //*** analysis the omega->pi0+gamma ***
239 //------------------------------------
240 AliAnaOmegaToPi0Gamma *anaomegaToPi0Gamma = new AliAnaOmegaToPi0Gamma();
241 anaomegaToPi0Gamma->SetDebug(-1);//10 for lots of messages
242 anaomegaToPi0Gamma->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
243 anaomegaToPi0Gamma->SetInputAODPhotonName(Form("Photons%s",calorimeter.Data()));
244 anaomegaToPi0Gamma->SetNPID(1);
245 anaomegaToPi0Gamma->SetNVtxZ(1);
246 anaomegaToPi0Gamma->SetNEventsMixed(4);
247 if(calorimeter=="PHOS")
248 anaomegaToPi0Gamma->SetPi0MassPeakWidthCut(0.008); // PHOS
249 else if(calorimeter=="EMCAL")
250 anaomegaToPi0Gamma->SetPi0MassPeakWidthCut(0.012); // EMCAL
251 anaomegaToPi0Gamma->SetHistoPtRangeAndNBins(0, 20, 100) ;
252 anaomegaToPi0Gamma->SetHistoMassRangeAndNBins(0, 1, 100) ;
253 anaomegaToPi0Gamma->SetPi0OverOmegaPtCut(0.8);
254 anaomegaToPi0Gamma->SetGammaOverOmegaPtCut(0.2);
255 if(kUseKinematics) anaomegaToPi0Gamma->SwitchOnDataMC() ;//Access MC stack and fill more histograms
256 else anaomegaToPi0Gamma->SwitchOffDataMC() ;//Access MC stack and fill more histograms
257 anaomegaToPi0Gamma->AddToHistogramsName(Form("AnaOmegaToPi0Gamma%s_",calorimeter.Data()));
258 if(kPrintSettings) anaomegaToPi0Gamma->Print("");
259
260 //==================================
261 // ### Isolation analysis ###
262 //=================================
263 //Photon
264 AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
265 anaisol->SetDebug(-1);
266 anaisol->SetMinPt(0);
267 anaisol->SetInputAODName(Form("Photons%s",calorimeter.Data()));
268 anaisol->SetAODObjArrayName("ICPhoton");
269 anaisol->SetCalorimeter(calorimeter);
270 if(kUseKinematics) anaisol->SwitchOnDataMC() ;//Access MC stack and fill more histograms
271 else anaisol->SwitchOffDataMC() ;
272 //Select clusters with no pair, if both clusters with pi0 mass
273 anaisol->SwitchOffInvariantMass();
274 //Do isolation cut
275 AliIsolationCut * ic = anaisol->GetIsolationCut();
276 ic->SetConeSize(0.4);
277 ic->SetPtThreshold(0.2);
278 ic->SetParticleTypeInCone(AliIsolationCut::kOnlyCharged);
279 ic->SetICMethod(AliIsolationCut::kPtThresIC);
280 if(kPrintSettings) ic->Print("");
281
282 //Do or not do isolation with previously produced AODs.
283 //No effect if use of SwitchOnSeveralIsolation()
284 anaisol->SwitchOffReIsolation();
285 //Multiple IC
286 anaisol->SwitchOffSeveralIsolation() ;
287 //Set Histograms bins and ranges
288 anaisol->SetHistoPtRangeAndNBins(0, 50, 200) ;
289 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
290 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
291 anaisol->AddToHistogramsName("AnaIsolPhoton_");
292 if(kPrintSettings) anaisol->Print("");
293
294 //Pi0
295 AliAnaParticleIsolation *anaisolpi0 = new AliAnaParticleIsolation();
296 anaisolpi0->SetDebug(-1);
297 anaisolpi0->SetMinPt(0);
298 anaisolpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
299 anaisolpi0->AddToHistogramsName("AnaIsolPi0_");
300 anaisolpi0->SetAODObjArrayName("ICPi0");
301 anaisolpi0->SetCalorimeter(calorimeter);
302 if(kUseKinematics) anaisolpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
303 else anaisolpi0->SwitchOffDataMC() ;
304 //Select clusters with no pair, if both clusters with pi0 mass
305 anaisolpi0->SwitchOffInvariantMass();
306 //Do isolation cut
307 AliIsolationCut * ic2 = anaisolpi0->GetIsolationCut();
308 ic2->SetConeSize(0.4);
309 ic2->SetPtThreshold(0.2);
310 ic2->SetICMethod(AliIsolationCut::kPtThresIC);
311 if(kPrintSettings) ic2->Print("");
312 //Do or not do isolation with previously produced AODs.
313 //No effect if use of SwitchOnSeveralIsolation()
314 anaisolpi0->SwitchOffReIsolation();
315 //Multiple IC
316 anaisolpi0->SwitchOffSeveralIsolation() ;
317 //Set Histograms bins and ranges
318 anaisolpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
319 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
320 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
321 if(kPrintSettings) anaisolpi0->Print("");
322
323 //===========================
324 //Correlation analysis
325 //===========================
326
327 // ### Correlation with Jet Finder AOD output
328 AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation();
329 anacorrjet->SetInputAODName(Form("Photons%s",calorimeter.Data()));
330 anacorrjet->SwitchOffFiducialCut();
331 anacorrjet->SetDebug(-1);
332 anacorrjet->SetConeSize(1);
333 anacorrjet->SelectIsolated(kTRUE); // do correlation with isolated photons
334 anacorrjet->SetPtThresholdInCone(0.2);
335 anacorrjet->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts
336 anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts
337 anacorrjet->UseJetRefTracks(kFALSE); //Not working now
338 //Set Histograms bins and ranges
339 anacorrjet->SetHistoPtRangeAndNBins(0, 50, 200) ;
340 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
341 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
342 if(kPrintSettings) anacorrjet->Print("");
343
344 // ### Correlation with hadrons
345 AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation();
346 anacorrhadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
347 anacorrhadron->AddToHistogramsName("AnaHadronCorrPhoton_");
348 anacorrhadron->SetAODObjArrayName("PhotonHadronCorr");
349 anacorrhadron->SetDebug(-1);
350 anacorrhadron->SwitchOffCaloPID();
351 anacorrhadron->SwitchOffFiducialCut();
352 anacorrhadron->SetPtCutRange(0.1,100);
353 anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
354 anacorrhadron->SwitchOnSeveralUECalculation();
355 anacorrhadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
356 anacorrhadron->SelectIsolated(kFALSE); // do correlation with isolated photons
357 if(kUseKinematics) anacorrhadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
358 else anacorrhadron->SwitchOffDataMC() ;
359 //if(calorimeter=="PHOS"){
360 //Correlate with particles in EMCAL
361 //anacorrhadron->SwitchOnCaloPID();
362 //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
363 //}
364 //Set Histograms bins and ranges
365 anacorrhadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
366 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
367 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
368 if(kPrintSettings) anacorrhadron->Print("");
369
370 // ### Correlation with hadrons
371 AliAnaParticleHadronCorrelation *anacorrisohadron = new AliAnaParticleHadronCorrelation();
372 anacorrisohadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
373 anacorrisohadron->AddToHistogramsName("AnaHadronCorrIsoPhoton_");
374 anacorrisohadron->SetAODObjArrayName("IsoPhotonHadronCorr");
375 anacorrisohadron->SetDebug(-1);
376 anacorrisohadron->SwitchOffCaloPID();
377 anacorrisohadron->SwitchOffFiducialCut();
378 anacorrisohadron->SetPtCutRange(0.1,100);
379 anacorrisohadron->SetDeltaPhiCutRange(1.5,4.5);
380 anacorrisohadron->SwitchOnSeveralUECalculation();
381 anacorrisohadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
382 anacorrisohadron->SelectIsolated(kTRUE); // do correlation with isolated photons
383 if(kUseKinematics) anacorrisohadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
384 else anacorrisohadron->SwitchOffDataMC() ;
385 //if(calorimeter=="PHOS"){
386 //Correlate with particles in EMCAL
387 //anacorrhadron->SwitchOnCaloPID();
388 //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
389 //}
390 //Set Histograms bins and ranges
391 anacorrisohadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
392 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
393 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
394 if(kPrintSettings) anacorrisohadron->Print("");
395
396
397 // ### Pi0 Correlation with hadrons, not isolated
398 AliAnaParticleHadronCorrelation *anacorrhadronpi0 = new AliAnaParticleHadronCorrelation();
399 anacorrhadronpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
400 anacorrhadronpi0->AddToHistogramsName("AnaHadronCorrPi0_");
401 anacorrhadronpi0->SetAODObjArrayName("Pi0HadronCorr");
402 anacorrhadronpi0->SetDebug(-1);
403 anacorrhadronpi0->SwitchOffCaloPID();
404 anacorrhadronpi0->SwitchOffFiducialCut();
405 anacorrhadronpi0->SetPtCutRange(0.1,100);
406 anacorrhadronpi0->SetDeltaPhiCutRange(1.5,4.5);
407 anacorrhadronpi0->SelectIsolated(kFALSE); // do correlation with non isolated pi0
408 anacorrhadronpi0->SwitchOnSeveralUECalculation();
409 anacorrhadronpi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
410 if(kUseKinematics) anacorrhadronpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
411 else anacorrhadronpi0->SwitchOffDataMC() ;
412 //if(calorimeter=="PHOS"){
413 // //Correlate with particles in EMCAL
414 // anacorrhadronpi0->SwitchOnCaloPID();
415 // anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
416 //}
417 //Set Histograms bins and ranges
418 anacorrhadronpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
419 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
420 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
421 if(kPrintSettings) anacorrhadronpi0->Print("");
422
423 // ### Pi0 Correlation with hadrons, isolated
424 AliAnaParticleHadronCorrelation *anacorrhadronisopi0 = new AliAnaParticleHadronCorrelation();
425 anacorrhadronisopi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
426 anacorrhadronisopi0->AddToHistogramsName("AnaHadronCorrIsoPi0_");
427 anacorrhadronisopi0->SetAODObjArrayName("IsoPi0HadronCorr");
428 anacorrhadronisopi0->SetDebug(-1);
429 anacorrhadronisopi0->SwitchOffCaloPID();
430 anacorrhadronisopi0->SwitchOffFiducialCut();
431 anacorrhadronisopi0->SetPtCutRange(0.1,100);
432 anacorrhadronisopi0->SetDeltaPhiCutRange(1.5,4.5);
433 anacorrhadronisopi0->SelectIsolated(kTRUE); // do correlation with isolated pi0
434 anacorrhadronisopi0->SwitchOnSeveralUECalculation();
435 anacorrhadronisopi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
436 if(kUseKinematics) anacorrhadronisopi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
437 else anacorrhadronisopi0->SwitchOffDataMC() ;
438 //if(calorimeter=="PHOS"){
439 // //Correlate with particles in EMCAL
440 // anacorrhadronpi0->SwitchOnCaloPID();
441 // anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
442 //}
443 //Set Histograms bins and ranges
444 anacorrhadronisopi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
445 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
446 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
447 if(kPrintSettings) anacorrhadronisopi0->Print("");
448
449
450 // #### Configure Maker ####
451 AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
452 maker->SetReader(reader);//pointer to reader
453 maker->SetCaloUtils(cu); //pointer to calorimeter utils
454 Int_t n = 0;//Analysis number, order is important
455
456 // Particle selection analysis
457 maker->AddAnalysis(anaphoton,n++);
458 maker->AddAnalysis(anapi0,n++);
459 maker->AddAnalysis(anapi0ebe,n++);
460 maker->AddAnalysis(anaomegaToPi0Gamma,n++);
461 // Isolation analysis
462 maker->AddAnalysis(anaisol,n++);
463 maker->AddAnalysis(anaisolpi0,n++);
464 // Correlation analysis
465 maker->AddAnalysis(anacorrjet,n++);
466 maker->AddAnalysis(anacorrhadron,n++);
467 maker->AddAnalysis(anacorrhadronpi0,n++);
468 maker->AddAnalysis(anacorrisohadron,n++);
469 maker->AddAnalysis(anacorrhadronisopi0,n);
470
471 maker->SetAnaDebug(-1) ;
472 maker->SwitchOnHistogramsMaker() ;
473 if(data.Contains("delta")) maker->SwitchOffAODsMaker() ;
474 else maker->SwitchOnAODsMaker() ;
475
476 if(kPrintSettings) maker->Print("");
477
478 printf("======================== \n");
479 printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data());
480 printf("======================== \n");
481
482 // Create task
483 //===========================================================================
484 AliAnalysisTaskParticleCorrelationM * task = new AliAnalysisTaskParticleCorrelationM (Form("PartCorr%s",calorimeter.Data()));
485 task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
486 //task->SetDebugLevel(-1);
487 //task->SelectCollisionCandidates();
488 task->SetAnalysisMaker(maker);
489 //if(!kSimulation)task->SelectCollisionCandidates(); //AliPhysicsSelection has to be attached before.
490 mgr->AddTask(task);
491
492 //Create containers
493 char name[128];
494 sprintf(name,"PartCorr_%s",calorimeter.Data());
495 cout<<"Name of task "<<name<<endl;
496 //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
497 // AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
498
499 TString outputfile = AliAnalysisManager::GetCommonFileName();
500 // AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr_%s",calorimeter.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr_%s",outputfile.Data(),calorimeter.Data()));
501 AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(calorimeter.Data(), TList::Class(),
502 AliAnalysisManager::kOutputContainer,
503 Form("%s:PartCorr",outputfile.Data()));
504
505 AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("%sCuts",calorimeter.Data()), TList::Class(),
506 AliAnalysisManager::kParamContainer,
507 Form("%s:PartCorrCuts",outputfile.Data()));
508
509 // Create ONLY the output containers for the data produced by the task.
510 // Get and connect other common input/output containers via the manager as below
511 //==============================================================================
512 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
513 // AOD output slot will be used in a different way in future
514 if(!data.Contains("delta") && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
515 mgr->ConnectOutput (task, 1, cout_pc);
516 mgr->ConnectOutput (task, 2, cout_cuts);
517
518 return task;
519}
520
521