]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/CaloTrackCorrelations/macros/AddTaskCaloTrackCorrM.C
move prints to AliDebug; fix coverity 24174
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / macros / AddTaskCaloTrackCorrM.C
1 AliAnalysisTaskCaloTrackCorrelationM *AddTaskCaloTrackCorrM(TString data, TString calorimeter, Bool_t kPrintSettings = kFALSE)
2 {
3   // Creates a CaloTrackCorr 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("AddTaskCaloTrackCorr", "No analysis manager to connect to.");
10     return NULL;
11   }  
12   Bool_t kUseKinematics = kFALSE; 
13   kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;    
14         
15   cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
16   
17   // Configure analysis
18   //===========================================================================
19   
20   //Reader
21   AliCaloTrackReader * reader = 0x0;
22   if(data.Contains("AOD")) reader = new AliCaloTrackAODReader();
23   else if(data=="ESD") reader = new AliCaloTrackESDReader();
24   else if(data=="MC" || (kUseKinematics && data == "ESD")) reader = new AliCaloTrackMCReader();
25   reader->SetDebug(-1);//10 for lots of messages
26   reader->SwitchOnCTS();
27   
28   if(calorimeter == "EMCAL") {
29     reader->SwitchOnEMCALCells();  
30     reader->SwitchOnEMCAL(); 
31   }
32   if(calorimeter == "PHOS") { 
33     reader->SwitchOnPHOSCells();  
34     reader->SwitchOnPHOS();
35   }
36   
37    reader->SwitchOnSuspiciousClustersRemoval();  //EMCAL
38
39   // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
40   if(data.Contains("delta")){
41     reader->SwitchOffEMCAL();
42     reader->SwitchOffPHOS();
43     reader->SwitchOffEMCALCells(); 
44     reader->SwitchOffPHOSCells(); 
45   }
46         
47   if(kUseKinematics){
48     if(data == "ESD"){
49       reader->SwitchOnStack();          
50       reader->SwitchOffAODMCParticles(); 
51     }
52     else if(data == "AOD"){
53       reader->SwitchOffStack();          
54       reader->SwitchOnAODMCParticles(); 
55     }
56   }
57   
58   reader->SetZvertexCut(10.);
59   
60   //Min particle pT
61   reader->SetEMCALPtMin(0.5); 
62   reader->SetPHOSPtMin(0.5);
63   reader->SetCTSPtMin(0.1);
64   reader->SwitchOffWriteDeltaAOD()  ;
65   if(kPrintSettings) reader->Print("");
66   
67   // ##### Analysis algorithm settings ####
68   AliCaloPID * pid = new AliCaloPID();
69   pid->SetDispersionCut(1.5);
70   pid->SetTOFCut(5.e-9);
71   pid->SetDebug(-1);
72   if(kPrintSettings) pid->Print("");
73   //Fiducial cut  
74 //  AliFiducialCut * fidCut1stYear = new AliFiducialCut();
75 //  fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
76 //  fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);
77 //  fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
78 //  fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
79 //  fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
80 //  fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,300.);
81   // -------------------------------------------------
82   // --- Isolation Cut ---
83   // -------------------------------------------------
84   AliIsolationCut * ic = new AliIsolationCut();
85   ic->SetConeSize(0.4);
86   //ic->SetPtThreshold(0.7);
87   ic->SetPtFraction(0.1);
88   ic->SetPtThreshold(0.7) ;
89   ic->SetSumPtThreshold(1.0) ;
90   //choose different method for IC:
91   //kPtThresIC, kSumPtIC, kPtFracIC, kSumPtFracIC
92   //  ic->SetICMethod(AliIsolationCut::kPtThresIC);
93   ic->SetICMethod(AliIsolationCut::kSumPtFracIC);
94   //particle in cone: kNeutralAndCharged=0, kOnlyNeutral=1, kOnlyCharged=2
95   ic->SetParticleTypeInCone(AliIsolationCut::kOnlyCharged);
96   if(kPrintSettings) ic->Print("");
97   
98   //analysis with calorimeter triggers  
99   if(calorimeter=="PHOS" || calorimeter=="EMCAL") {  
100     AliCalorimeterUtils * cu = new AliCalorimeterUtils();
101     cu->SwitchOnBadChannelsRemoval();
102     
103     cu->SetNumberOfCellsFromEMCALBorder(1) ; //nEMCAL);
104     cu->SetNumberOfCellsFromPHOSBorder(2) ; //nPHOS);
105      
106     // -----------------------------------
107     // --- Photon and Pi0  Analysis ---
108     // -----------------------------------
109     
110     AliAnaPhoton *anaphoton = new AliAnaPhoton();
111     anaphoton->SetDebug(-1); //10 for lots of messages
112     anaphoton->SetMinPt(1.0);
113     anaphoton->SetCaloPID(pid);
114     anaphoton->SetCalorimeter(calorimeter);
115     if(kUseKinematics) anaphoton->SwitchOnDataMC() ;//Access MC stack and fill more histograms
116     else  anaphoton->SwitchOffDataMC() ;
117     anaphoton->SwitchOffCaloPID();
118     anaphoton->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
119     anaphoton->SwitchOnFiducialCut();
120     AliFiducialCut * fidCut1stYear = anaphoton->GetFiducialCut();
121     fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
122     fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
123     fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
124     fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
125     anaphoton->SwitchOnTrackMatchRejection();
126     //settings for different multiplicity analysis
127     anaphoton->SwitchOffEventSelection() ;
128     anaphoton->SetMultiplicity(80, 120);
129     
130     if(calorimeter == "EMCAL"){
131       anaphoton->SetNCellCut(1);
132       anaphoton->SetMinPt(0.3); 
133       //if(!kUseKinematics) anaphoton->SetTimeCut(525, 725);
134       anaphoton->SetMinDistanceToBadChannel(1, 2, 3);
135     }
136     else{
137       anaphoton->SetMinPt(0.3);       
138       anaphoton->SetMinDistanceToBadChannel(2, 4, 5);
139       anaphoton->SetNCellCut(2);
140     }
141     if(!data.Contains("delta")) {
142       anaphoton->SetOutputAODName(Form("Triggers%s",calorimeter.Data()));
143       anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
144     }
145     else anaphoton->SetOutputAODName(Form("Triggers%s",calorimeter.Data()));
146     anaphoton->AddToHistogramsName("AnaPhoton_");
147     //Set Histograms bins and ranges
148     anaphoton->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
149     //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
150     //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
151     
152     if(kPrintSettings) anaphoton->Print("");
153     AliAnaPi0 *anapi0 = new AliAnaPi0();
154     anapi0->SetDebug(-1);//10 for lots of messages
155     anapi0->SetInputAODName(Form("Triggers%s",calorimeter.Data()));
156     anapi0->AddToHistogramsName("AnaPi0_");
157     anapi0->SetCaloPID(pid);
158     anapi0->SetCalorimeter(calorimeter);
159     anapi0->SwitchOnFiducialCut();
160     AliFiducialCut * fidCut1stYear = anapi0->GetFiducialCut();
161     fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
162     fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
163     fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
164     fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
165     anapi0->SetNPID(1); 
166     //settings for different multiplicity analysis
167     anapi0->SwitchOnEventSelection() ;
168     anapi0->SetNCentrBin(1);
169     anapi0->SetMultiplicity(80, 120);
170     anapi0->SetMultiBin(1);  
171     anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
172  
173     anapi0->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
174     //anapi0->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
175     //anapi0->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.8, 0.8, 200) ;
176     anapi0->GetHistogramRanges()->SetHistoMassRangeAndNBins(0., 1.0, 100) ;
177     anapi0->GetHistogramRanges()->SetHistoAsymmetryRangeAndNBins(0., 1. , 10) ;
178     if(kPrintSettings) anapi0->Print("");
179     
180     // -------------------------------------------------
181     // --- Pi0 EbE Analysis ---
182     // -------------------------------------------------
183     
184     AliNeutralMesonSelection *nms = new AliNeutralMesonSelection();
185     nms->SetInvMassCutRange(0.05, 0.16)     ;
186     nms->SwitchOffAngleSelection() ;
187     nms->KeepNeutralMesonSelectionHistos(kTRUE);
188     //Set Histrograms bins and ranges
189     nms->SetHistoERangeAndNBins(0, 50, 100) ;
190     nms->SetHistoPtRangeAndNBins(0, 50, 100) ;
191     //      nms->GetHistogramRanges()->SetHistoAngleRangeAndNBins(0, 0.3, 100) ;
192     //      nsm->GetHistogramRanges()->SetHistoIMRangeAndNBins(0, 0.4, 100) ;  
193     
194     AliAnaPi0EbE *anapi0ebe = new AliAnaPi0EbE();
195     anapi0ebe->SetDebug(-1);//10 for lots of messages
196     anapi0ebe->SetAnalysisType(AliAnaPi0EbE::kIMCalo);
197     anapi0ebe->SetMinPt(0.5);
198     anapi0ebe->SetCalorimeter(calorimeter);
199     anapi0ebe->SetInputAODName(Form("Triggers%s",calorimeter.Data()));
200     if(!data.Contains("delta")) {
201       anapi0ebe->SetOutputAODName(Form("Pi0s%s",calorimeter.Data()));
202       anapi0ebe->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
203     }
204     else  anapi0ebe->SetOutputAODName(Form("Pi0s%s",calorimeter.Data()));
205     
206     if(kUseKinematics) anapi0ebe->SwitchOnDataMC() ;//Access MC stack and fill more histograms
207     else  anapi0ebe->SwitchOffDataMC() ;        
208     anapi0ebe->SwitchOffEventSelection() ;
209     anapi0ebe->SetMultiplicity(80, 120);
210     anapi0ebe->SetMultiBin(1);  
211     anapi0ebe->SetNeutralMesonSelection(nms);
212     //Set Histrograms bins and ranges
213     anapi0ebe->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
214     //      anapi0->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
215     //      anapi0->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
216     if(kPrintSettings) anapi0ebe->Print("");
217     
218     // ### Pi0 Correlation with hadrons, not isolated
219     AliAnaParticleHadronCorrelation *anacorrhadronpi0 = new AliAnaParticleHadronCorrelation();
220     anacorrhadronpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
221     anacorrhadronpi0->AddToHistogramsName("AnaHadronCorrPi0_");
222     anacorrhadronpi0->SetDebug(-1);
223     anacorrhadronpi0->SwitchOffCaloPID();
224     anacorrhadronpi0->SwitchOnFiducialCut();
225     AliFiducialCut * fidCut1stYear = anacorrhadronpi0->GetFiducialCut();
226     fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
227     fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
228     fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
229     fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
230     fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
231     fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);    
232     anacorrhadronpi0->SwitchOnDecayCorr();
233     anacorrhadronpi0->SetPtCutRange(0.5,50);
234     anacorrhadronpi0->SetDeltaPhiCutRange(1.5,4.5);
235     anacorrhadronpi0->SelectIsolated(kFALSE); // do correlation with non isolated pi0
236     anacorrhadronpi0->SetMultiplicity(80, 100);
237     anacorrhadronpi0->SetMultiBin(1);
238     anacorrhadronpi0->SwitchOffNeutralCorr();
239     anacorrhadronpi0->SwitchOffEventSelection();
240     anacorrhadronpi0->SwitchOnSeveralUECalculation();
241     anacorrhadronpi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
242     if(kUseKinematics) anacorrhadronpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
243     else  anacorrhadronpi0->SwitchOffDataMC() ;
244     //if(calorimeter=="PHOS"){
245     //  //Correlate with particles in EMCAL
246     //  anacorrhadronpi0->SwitchOnCaloPID();
247     //  anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
248     //}
249     //Set Histograms bins and ranges
250     anacorrhadronpi0->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
251     //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
252     //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
253     if(kPrintSettings) anacorrhadronpi0->Print("");
254     
255     AliAnaParticleIsolation *anaisolpi0 = new AliAnaParticleIsolation();
256     anaisolpi0->SetDebug(-1);
257     anaisolpi0->SetMinPt(2.);
258     anaisolpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
259     anaisolpi0->AddToHistogramsName("AnaIsolPi0_");
260     anaisolpi0->SetCalorimeter(calorimeter);
261     if(kUseKinematics) anaisolpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
262     else  anaisolpi0->SwitchOffDataMC() ;
263     //Select clusters with no pair, if both clusters with pi0 mass
264     anaisolpi0->SwitchOffInvariantMass();
265     //anaisol->SetNeutralMesonSelection(nms);
266     //Do isolation cut
267     anaisolpi0->SetIsolationCut(ic);    
268     //Do or not do isolation with previously produced AODs.
269     //No effect if use of SwitchOnSeveralIsolation()
270     anaisolpi0->SwitchOffReIsolation();
271     //Multiple IC
272     anaisolpi0->SwitchOffSeveralIsolation() ;
273     //Set Histograms bins and ranges
274     anaisolpi0->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
275     //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
276     //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
277     if(kPrintSettings) anaisol->Print("");
278     
279     // ### Pi0 Correlation with hadrons, isolated
280     AliAnaParticleHadronCorrelation *anacorrhadronisopi0 = new AliAnaParticleHadronCorrelation();
281     anacorrhadronisopi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
282     anacorrhadronisopi0->AddToHistogramsName("AnaHadronCorrIsoPi0_");
283     anacorrhadronisopi0->SetDebug(-1);
284     anacorrhadronisopi0->SwitchOffCaloPID();
285     anacorrhadronisopi0->SwitchOnFiducialCut();
286     AliFiducialCut * fidCut1stYear = anacorrhadronisopi0->GetFiducialCut();
287     fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
288     fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
289     fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
290     fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
291     fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
292     fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);    
293     anacorrhadronisopi0->SwitchOnDecayCorr();
294     anacorrhadronisopi0->SetPtCutRange(0.5,50);
295     anacorrhadronisopi0->SetDeltaPhiCutRange(1.5,4.5);
296     anacorrhadronisopi0->SelectIsolated(kTRUE); // do correlation with isolated pi0
297     anacorrhadronisopi0->SetMultiplicity(80, 100);
298     anacorrhadronisopi0->SetMultiBin(1);
299     anacorrhadronisopi0->SwitchOffNeutralCorr();
300     anacorrhadronisopi0->SwitchOffEventSelection();  
301     anacorrhadronisopi0->SwitchOnSeveralUECalculation();
302     anacorrhadronisopi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
303     if(kUseKinematics) anacorrhadronisopi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
304     else  anacorrhadronisopi0->SwitchOffDataMC() ;
305     //if(calorimeter=="PHOS"){
306     //  //Correlate with particles in EMCAL
307     //  anacorrhadronpi0->SwitchOnCaloPID();
308     //  anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
309     //}
310     //Set Histograms bins and ranges
311     anacorrhadronisopi0->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
312     //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
313     //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
314     if(kPrintSettings) anacorrhadronisopi0->Print("");
315     
316   } //analysis in calorimeter
317   else {
318     //---charge particle trigger---------------------
319     //------------------------------------------------
320     
321     AliAnaChargedParticles *anacharge = new AliAnaChargedParticles();
322     anacharge->SetDebug(-1); //10 for lots of messages
323     anacharge->SetMinPt(1.0);
324     // anacharge->SetCaloPID(pid);
325     if(kUseKinematics) anacharge->SwitchOnDataMC() ;//Access MC stack and fill more histograms
326     else  anacharge->SwitchOffDataMC() ;
327     anacharge->SwitchOffCaloPID();
328     anacharge->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
329     anacharge->SwitchOnFiducialCut();
330     AliFiducialCut * fidCut1stYear = anacharge->GetFiducialCut();
331     fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
332     fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);       
333     if(!data.Contains("delta")) {
334       anacharge->SetOutputAODName(Form("Triggers%s",calorimeter.Data()));
335       anacharge->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
336     }
337     else anacharge->SetOutputAODName(Form("Triggers%s",calorimeter.Data()));
338     anacharge->AddToHistogramsName("AnaCharge_");
339     //Set Histograms bins and ranges
340     anacharge->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
341     //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
342     //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
343     
344     if(kPrintSettings) anacharge->Print("");    
345   }
346   
347   // -------------------------------------------------
348   // ---  Correlation Analysis with non-isolated triggers ---
349   // -------------------------------------------------
350   // ### Correlation with hadrons
351   AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation();
352   anacorrhadron->SetInputAODName(Form("Triggers%s",calorimeter.Data()));
353   anacorrhadron->AddToHistogramsName("AnaHadronCorrTrig_");
354   anacorrhadron->SetDebug(-1);
355   anacorrhadron->SwitchOnCaloPID();
356   anacorrhadron->SwitchOnFiducialCut();
357   AliFiducialCut * fidCut1stYear = anacorrhadron->GetFiducialCut();
358   fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
359   fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
360   fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
361   fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
362   fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
363   fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);    
364   anacorrhadron->SetPtCutRange(0.5,50);
365   anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
366   anacorrhadron->SetMultiplicity(80, 120);
367   anacorrhadron->SetMultiBin(1);
368   anacorrhadron->SwitchOffNeutralCorr();
369   anacorrhadron->SwitchOffEventSelection();
370   anacorrhadron->SwitchOnSeveralUECalculation();
371   anacorrhadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
372   anacorrhadron->SelectIsolated(kFALSE); // do correlation with isolated photons
373   if(kUseKinematics) anacorrhadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
374   else  anacorrhadron->SwitchOffDataMC() ;
375   //if(calorimeter=="PHOS"){
376   //Correlate with particles in EMCAL
377   //anacorrhadron->SwitchOnCaloPID();
378   //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
379   //}
380   //Set Histograms bins and ranges
381   anacorrhadron->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
382   //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
383   //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
384   if(kPrintSettings) anacorrhadron->Print("");
385   
386   
387   
388   // ### Isolation analysis ### 
389   AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
390   anaisol->SetDebug(-1);
391   anaisol->SetMinPt(2.0);
392   anaisol->SetInputAODName(Form("Triggers%s",calorimeter.Data()));
393   anaisol->AddToHistogramsName("AnaIsolTrig_");
394   anaisol->SetCalorimeter(calorimeter);
395   if(kUseKinematics) anaisol->SwitchOnDataMC() ;//Access MC stack and fill more histograms
396   else  anaisol->SwitchOffDataMC() ;
397   //Select clusters with no pair, if both clusters with pi0 mass
398   anaisol->SwitchOffInvariantMass();
399   //anaisol->SetNeutralMesonSelection(nms);
400   //Do isolation cut
401   anaisol->SetIsolationCut(ic); 
402   //Do or not do isolation with previously produced AODs.
403   //No effect if use of SwitchOnSeveralIsolation()
404   anaisol->SwitchOffReIsolation();
405   //Multiple IC
406   anaisol->SwitchOffSeveralIsolation() ;
407   //Set Histograms bins and ranges
408   anaisol->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
409   //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
410   //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
411   
412   if(kPrintSettings) anaisol->Print("");
413   
414   // -------------------------------------------------
415   // ---  Correlation Analysis with isolated triggers ---
416   // -------------------------------------------------
417   // ### Correlation with hadrons
418   AliAnaParticleHadronCorrelation *anacorrisohadron = new AliAnaParticleHadronCorrelation();
419   anacorrisohadron->SetInputAODName(Form("Triggers%s",calorimeter.Data()));
420   anacorrisohadron->AddToHistogramsName("AnaHadronCorrIsoTrig_");
421   anacorrisohadron->SetDebug(-1);
422   anacorrisohadron->SwitchOffCaloPID();
423   anacorrisohadron->SwitchOnFiducialCut();
424   AliFiducialCut * fidCut1stYear = anacorrisohadron->GetFiducialCut();
425   fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
426   fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
427   fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
428   fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
429   fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
430   fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);    
431   anacorrisohadron->SetPtCutRange(0.5,50);
432   anacorrisohadron->SetDeltaPhiCutRange(1.5,4.5);
433   anacorrisohadron->SetMultiplicity(80, 100);
434   anacorrisohadron->SetMultiBin(1);
435   anacorrisohadron->SwitchOffNeutralCorr();
436   anacorrisohadron->SwitchOffEventSelection();
437   anacorrisohadron->SwitchOnSeveralUECalculation();
438   anacorrisohadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
439   anacorrisohadron->SelectIsolated(kTRUE); // do correlation with isolated photons
440   if(kUseKinematics) anacorrisohadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
441   else  anacorrisohadron->SwitchOffDataMC() ;
442   //if(calorimeter=="PHOS"){
443   //Correlate with particles in EMCAL
444   //anacorrhadron->SwitchOnCaloPID();
445   //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
446   //}
447   //Set Histograms bins and ranges
448   anacorrisohadron->GetHistogramRanges()->SetHistoPtRangeAndNBins(0, 50, 100) ;
449   //      ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
450   //      ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
451   if(kPrintSettings) anacorrisohadron->Print("");
452   
453   // #### Configure Maker ####
454   AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
455   maker->SetReader(reader);//pointer to reader
456   Int_t n = 0;//Analysis number, order is important
457   // Particle selection analysis
458   if(calorimeter=="PHOS" || calorimeter=="EMCAL") {   
459     maker->SetCaloUtils(cu);  //pointer to calorimeter utils
460     maker->AddAnalysis(anaphoton,n++);
461     maker->AddAnalysis(anapi0,n++);
462     maker->AddAnalysis(anapi0ebe,n++);
463     maker->AddAnalysis(anacorrhadronpi0,n++);
464     maker->AddAnalysis(anaisolpi0,n++);
465     maker->AddAnalysis(anacorrhadronisopi0,n++);
466   }
467    if(calorimeter=="CTS") 
468      maker->AddAnalysis(anacharge,n++);
469   // Correlation analysis
470   maker->AddAnalysis(anacorrhadron,n++);
471   // Isolation analysis
472   maker->AddAnalysis(anaisol,n++);
473   // Correlation analysis with isolated triggers
474   maker->AddAnalysis(anacorrisohadron,n);
475   maker->SetAnaDebug(-1)  ;
476   maker->SwitchOnHistogramsMaker()  ;
477   if(data.Contains("delta")) maker->SwitchOffAODsMaker()  ;
478   else                       maker->SwitchOnAODsMaker()  ;
479         
480   if(kPrintSettings) maker->Print("");
481   
482   printf("======================== \n");
483   printf(" End Configuration of CaloTrackCorr analysis with detector %s \n",calorimeter.Data());
484   printf("======================== \n");
485   
486   // Create task
487   //===========================================================================
488  // AliAnalysisTaskCaloTrackCorrelationM * task = new AliAnalysisTaskCaloTrackCorrelationM(Form("CaloTrackCorr%s",calorimeter.Data()));
489   AliAnalysisTaskCaloTrackCorrelationM * task = new AliAnalysisTaskCaloTrackCorrelationM("CaloTrackCorr");
490   task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
491   //task->SetDebugLevel(-1);
492   task->SetAnalysisMaker(maker);
493   //if(!kSimulation)task->SelectCollisionCandidates(); //AliPhysicsSelection has to be attached before.
494   mgr->AddTask(task);
495   
496 //  char name[128];
497 //  sprintf(name,"CaloTrackCorr_%s",calorimeter.Data());
498 //  cout<<"Name of task "<<name<<endl;
499   //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
500   //                                       AliAnalysisManager::kOutputContainer, Form("CaloTrackCorr_%s.root",calorimeter.Data()));
501   
502   TString outputfile = AliAnalysisManager::GetCommonFileName(); 
503   outputfile.ReplaceAll(".root","") ;
504   outputfile.Append("M.root") ;  
505   //  AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("CaloTrackCorr_%s",calorimeter.Data()),  TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:CaloTrackCorr_%s",outputfile.Data(),calorimeter.Data()));
506   AliAnalysisDataContainer *cout_pc   = mgr->CreateContainer(calorimeter.Data(), TList::Class(),
507                                                              AliAnalysisManager::kOutputContainer,
508                                                              Form("%s:CaloTrackCorr",outputfile.Data()));
509   
510   AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("%sCuts",calorimeter.Data()), TList::Class(),
511                                                              AliAnalysisManager::kParamContainer,
512                                                              Form("%s:CaloTrackCorrCuts",outputfile.Data()));
513   // Create ONLY the output containers for the data produced by the task.
514   // Get and connect other common input/output containers via the manager as below
515   //==============================================================================
516   mgr->ConnectInput  (task, 0, mgr->GetCommonInputContainer());
517   // AOD output slot will be used in a different way in future
518  //if(!data.Contains("delta")) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
519  // mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
520   mgr->ConnectOutput (task, 1, cout_pc);
521   mgr->ConnectOutput (task, 2, cout_cuts);  
522   
523   return task;
524 }
525
526