1 AliAnalysisTaskParticleCorrelation *AddTaskPartCorr
5 Bool_t kPrintSettings = kTRUE,
6 Bool_t kSimulation = kFALSE,
7 Bool_t outputAOD=kFALSE,
11 // Creates a PartCorr task, configures it and adds it to the analysis manager.
13 // Get the pointer to the existing analysis manager via the static access method.
14 //==============================================================================
15 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
17 ::Error("AddTaskPartCorr", "No analysis manager to connect to.");
21 Bool_t kUseKinematics = kFALSE;
23 kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
24 if (!kUseKinematics && inputDataType == "AOD") kUseKinematics = kTRUE; //AOD primary should be available ...
27 cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
30 //===========================================================================
33 AliCaloTrackReader * reader =0x0 ;
34 if(inputDataType.Contains("AOD")) reader = new AliCaloTrackAODReader();
35 else if(inputDataType=="ESD") reader = new AliCaloTrackESDReader();
36 else if(inputDataType=="MC" && inputDataType == "ESD") reader = new AliCaloTrackMCReader();
37 reader->SetDebug(-1);//10 for lots of messages
38 reader->SwitchOnCTS();
39 //reader->SetDeltaAODFileName("");
40 //if(!kSimulation) reader->SetFiredTriggerClassName("CINT1B-ABCE-NOPF-ALL");
41 if(calorimeter == "EMCAL") {
42 reader->SwitchOnEMCALCells();
43 reader->SwitchOnEMCAL();
45 if(calorimeter == "PHOS") {
46 reader->SwitchOnPHOSCells();
47 reader->SwitchOnPHOS();
50 // for case inputDataType="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
51 if(inputDataType.Contains("delta")){
52 reader->SwitchOffEMCAL();
53 reader->SwitchOffPHOS();
54 reader->SwitchOffEMCALCells();
55 reader->SwitchOffPHOSCells();
59 if(inputDataType == "ESD"){
60 reader->SwitchOnStack();
61 reader->SwitchOffAODMCParticles();
63 else if(inputDataType == "AOD"){
64 reader->SwitchOffStack();
65 reader->SwitchOnAODMCParticles();
69 //-----------------------------------------------------------------
70 // Switch on cluster energy smearing
73 //-----------------------------------------------------------------
75 if (kSimulation && calorimeter == "EMCAL") {
76 //switch on cluster energy smearing
77 reader->SwitchOnClusterEnergySmearing();
78 reader->SetSmearingParameters(0,0.07);
79 reader->SetSmearingParameters(1,0.00);
80 reader->SetSmearingParameters(2,0.00);
84 //-----------------------------------------------------------------
86 reader->SetZvertexCut(10.);
87 //-----------------------------------------------------------------
89 //-----------------------------------------------------------------
91 //-----------------------------------------------------------------
92 reader->SetEMCALPtMin(0.3);
93 reader->SetPHOSPtMin(0.3);
94 reader->SetCTSPtMin(0.1);
96 if(outputAOD) reader->SwitchOnWriteDeltaAOD() ;
97 if(kPrintSettings) reader->Print("");
99 // *** Calorimeters Utils ***
100 AliCalorimeterUtils *cu = new AliCalorimeterUtils;
102 //-----------------------------------------------------------------
103 // Non-linearity corrections
104 // -> REAL DATA AND SIMULATION
106 //-----------------------------------------------------------------
107 if (calorimeter == "EMCAL") {
108 cu->GetEMCALRecoUtils()->SwitchOnRejectExoticCluster();
109 cu->SwitchOnCorrectClusterLinearity();
111 cu->GetEMCALRecoUtils()->SetNonLinearityFunction(AliEMCALRecoUtils::kBeamTestCorrected);
114 cu->GetEMCALRecoUtils()->SetNonLinearityFunction(AliEMCALRecoUtils::kPi0MC);
115 cu->GetEMCALRecoUtils()->SetNonLinearityParam(0,1.001 ) ;
116 cu->GetEMCALRecoUtils()->SetNonLinearityParam(1,-0.01264) ;
117 cu->GetEMCALRecoUtils()->SetNonLinearityParam(2,-0.03632) ;
118 cu->GetEMCALRecoUtils()->SetNonLinearityParam(3,0.1798 ) ;
119 cu->GetEMCALRecoUtils()->SetNonLinearityParam(4,-0.522 ) ;
123 //-----------------------------------------------------------------
124 // Remove clusters close to borders,
125 // at least max energy cell is 1 cell away
126 //-----------------------------------------------------------------
127 cu->SetNumberOfCellsFromEMCALBorder(1);
128 cu->SetNumberOfCellsFromPHOSBorder(2);
131 //-----------------------------------------------------------------
132 // Remove EMCAL hottest channels
133 // -> REAL DATA AND SIMULATION
135 // Recover the file from alien
136 // /alice/cern.ch/user/g/gconesab/BadChannelsDB
137 //-----------------------------------------------------------------
138 if (calorimeter == "EMCAL" && period !="") {
139 cu->SwitchOnBadChannelsRemoval();
140 cu->SwitchOnDistToBadChannelRecalculation();
141 TFile * fbad = new TFile("BadChannels.root","read");
142 TH2I * hbad0 = (TH2I*)fbad->Get("EMCALBadChannelMap_Mod0");
143 TH2I * hbad1 = (TH2I*)fbad->Get("EMCALBadChannelMap_Mod1");
144 TH2I * hbad2 = (TH2I*)fbad->Get("EMCALBadChannelMap_Mod2");
145 TH2I * hbad3 = (TH2I*)fbad->Get("EMCALBadChannelMap_Mod3");
146 cu->SetEMCALChannelStatusMap(0,hbad0);
147 cu->SetEMCALChannelStatusMap(1,hbad1);
148 cu->SetEMCALChannelStatusMap(2,hbad2);
149 cu->SetEMCALChannelStatusMap(3,hbad3);
153 //-----------------------------------------------------------------
154 // Misalignment + recalculate position
155 // -> REAL DATA and SIMULATION
157 //-----------------------------------------------------------------
158 if (calorimeter == "EMCAL") {
159 cu->SetEMCALGeometryName("EMCAL_FIRSTYEARV1");
160 cu->GetEMCALRecoUtils()->SetParticleType(AliEMCALRecoUtils::kPhoton);
161 cu->GetEMCALRecoUtils()->SetW0(4.5);
162 cu->GetEMCALRecoUtils()->SetPositionAlgorithm(AliEMCALRecoUtils::kPosTowerGlobal);
163 cu->SwitchOnLoadOwnEMCALGeometryMatrices();
164 TGeoHMatrix *matrix[4];
166 double rotationMatrix[4][9] = {-0.014587, -0.999892, -0.002031, 0.999892, -0.014591, 0.001979, -0.002009, -0.002002, 0.999996,
167 -0.014587, 0.999892, 0.002031, 0.999892, 0.014591, -0.001979, -0.002009, 0.002002, -0.999996,
168 -0.345864, -0.938278, -0.003412, 0.938276, -0.345874, 0.003010, -0.004004, -0.002161, 0.999990,
169 -0.345861, 0.938280, 0.003412, 0.938276, 0.345874, -0.003010, -0.004004, 0.002161, -0.999990};
171 double translationMatrix[4][3] = {0.351659, 447.576446, 176.269742,
172 1.062577, 446.893974, -173.728870,
173 -154.213287, 419.306156, 176.753692,
174 -153.018950, 418.623681, -173.243605};
175 for(int j=0; j<4; j++)
177 matrix[j] = new TGeoHMatrix();
178 matrix[j]->SetRotation(rotationMatrix[j]);
179 matrix[j]->SetTranslation(translationMatrix[j]);
181 cu->SetEMCALGeometryMatrixInSM(matrix[j],j);
183 //cu->SwitchOnRecalculateClusterTrackMatching();
186 //-----------------------------------------------------------------
187 // Time dependent corrections
190 // Recover file from alien
191 // /alice/cern.ch/user/g/gconesab/TimeDepCorrectionDB
192 //-----------------------------------------------------------------
193 if (!kSimulation && calorimeter == "EMCAL" && period!="") {
194 cu->GetEMCALRecoUtils()->SwitchOnTimeDepCorrection();
196 sprintf(cmd, ".!tar xvfz CorrectionFiles.tgz >& /dev/null") ;
197 gROOT->ProcessLine(cmd) ;
201 //------------------------------------------------------------------------
202 // Recalibration factors
205 // Recover the file from alien for LHC10d pass2
206 // /alice/cern.ch/user/g/gconesab/RecalDB/december2010 -> LHC10d pass2
207 // /alice/cern.ch/user/g/gconesab/RecalDB/summer_december2010 -> LHC10e pass1
209 // For other periods/passes, see
210 // https://twiki.cern.ch/twiki/bin/view/ALICE/EMCalOffline#Summary_of_Calibration_and_Align
211 //------------------------------------------------------------------------
213 if (calorimeter == "EMCAL" && period !="") {
214 cu->SwitchOnRecalibration();
217 if (period == "LHC10d") f = new TFile("RecalibrationFactors_LHC10d.root","read");
218 else if (period == "LHC10e") f = new TFile("RecalibrationFactors_LHC10e.root","read");
219 else Fatal("AddTaskPartCorr","run period not supported");
222 f = new TFile("DecalibrationFactors.root","read");
224 if (!f || !f->IsOpen()) Fatal("AddTaskPartCorr","Re(De)-calibration file not found");
226 Info("AddTaskPartCorr",Form("Using calibration files for period %s",period.Data()));
228 TH2F * h0 = (TH2F*)f->Get("EMCALRecalFactors_SM0");
229 TH2F * h1 = (TH2F*)f->Get("EMCALRecalFactors_SM1");
230 TH2F * h2 = (TH2F*)f->Get("EMCALRecalFactors_SM2");
231 TH2F * h3 = (TH2F*)f->Get("EMCALRecalFactors_SM3");
232 cu->SetEMCALChannelRecalibrationFactors(0,h0);
233 cu->SetEMCALChannelRecalibrationFactors(1,h1);
234 cu->SetEMCALChannelRecalibrationFactors(2,h2);
235 cu->SetEMCALChannelRecalibrationFactors(3,h3);
241 // ##### Analysis algorithm settings ####
243 // -------------------------------------------------
244 // --- Photon/Pi0/Omega/Electron Analysis ---
245 // -------------------------------------------------
247 AliAnaPhoton *anaphoton = new AliAnaPhoton();
248 anaphoton->SetDebug(-1); //10 for lots of messages
250 if(calorimeter == "PHOS"){
251 anaphoton->SetNCellCut(2);
252 anaphoton->SetMinPt(0.3);
253 anaphoton->SetMinDistanceToBadChannel(2, 4, 5);
256 anaphoton->SetNCellCut(1);
257 anaphoton->SetMinPt(0.);
258 //if(!kUseKinematics) anaphoton->SetTimeCut(400,900);// Time window of [400-900] ns
259 anaphoton->SetMinDistanceToBadChannel(1, 2, 3);
261 anaphoton->SetCalorimeter(calorimeter);
262 if(kUseKinematics) anaphoton->SwitchOnDataMC() ;//Access MC stack and fill more histograms
263 else anaphoton->SwitchOffDataMC() ;
264 anaphoton->SwitchOffCaloPID();
265 anaphoton->SwitchOffFiducialCut();
267 anaphoton->SwitchOnFiducialCut();
268 AliFiducialCut * fidCut1stYear = anaphoton->GetFiducialCut();
269 fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
270 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
271 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
272 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
273 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
276 if(!inputDataType.Contains("delta")) {
277 anaphoton->SetOutputAODName(Form("Photons%s",calorimeter.Data()));
278 anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
280 else anaphoton->SetInputAODName(Form("Photons%s",calorimeter.Data()));
281 anaphoton->AddToHistogramsName("AnaPhotonCorr_");
282 //Set Histograms bins and ranges
283 anaphoton->SetHistoPtRangeAndNBins(0, 20, 200) ;
284 if(kPrintSettings) anaphoton->Print("");
286 // -----------------------------------
287 // --- Pi0 Invariant Mass Analysis ---
288 // -----------------------------------
290 AliAnaPi0 *anapi0 = new AliAnaPi0();
291 anapi0->SetDebug(-1);//10 for lots of messages
292 anapi0->SetInputAODName(Form("Photons%s",calorimeter.Data()));
293 anapi0->SetCalorimeter(calorimeter);
294 anapi0->SwitchOnMultipleCutAnalysis();
296 anapi0->SwitchOnFiducialCut();
297 AliFiducialCut * fidCut1stYear = anapi0->GetFiducialCut();
298 fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
299 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
300 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
301 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
302 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
305 //settings for pp collision
306 anapi0->SwitchOnOwnMix();
307 anapi0->SwitchOnEventSelection() ;
308 anapi0->SetNCentrBin(1);
309 //anapi0->SetMultiplicity(80, 120);
310 anapi0->SetMultiBin(1);
311 if(kUseKinematics)anapi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
312 else anapi0->SwitchOffDataMC() ;
313 if(calorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
314 else anapi0->SetNumberOfModules(4); //EMCAL first year
315 anapi0->SetHistoPtRangeAndNBins(0, 20, 40) ;
316 //anapi0->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
317 //anapi0->SetHistoEtaRangeAndNBins(-0.8, 0.8, 200) ;
318 anapi0->SetHistoMassRangeAndNBins(0., 0.9, 300) ;
319 anapi0->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
320 anapi0->SetHistoTrackMultiplicityRangeAndNBins(0, 200, 20);
322 if(kPrintSettings) anapi0->Print("");
324 //---------------------------
325 //Pi0, event by event
326 //---------------------------
328 AliAnaPi0EbE *anapi0ebe = new AliAnaPi0EbE();
329 anapi0ebe->SwitchOffEventSelection() ;
330 //anapi0ebe->SetMultiplicity(80, 120);
331 anapi0ebe->SetMultiBin(1);
332 anapi0ebe->SetDebug(-1);//10 for lots of messages
333 anapi0ebe->SetAnalysisType(AliAnaPi0EbE::kIMCalo);
334 anapi0ebe->SetMinPt(0);
335 anapi0ebe->SetCalorimeter(calorimeter);
336 anapi0ebe->SetInputAODName(Form("Photons%s",calorimeter.Data()));
337 if(!inputDataType.Contains("delta")) {
338 anapi0ebe->SetOutputAODName(Form("Pi0s%s",calorimeter.Data()));
339 anapi0ebe->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
341 else anapi0ebe->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
343 if(kUseKinematics) anapi0ebe->SwitchOnDataMC() ;//Access MC stack and fill more histograms
344 else anapi0ebe->SwitchOffDataMC() ;
346 AliNeutralMesonSelection *nms = anapi0ebe->GetNeutralMesonSelection();
347 nms->SetInvMassCutRange(0.08, 0.18) ;
348 nms->KeepNeutralMesonSelectionHistos(kTRUE);
349 //Set Histrograms bins and ranges
350 if(calorimeter=="EMCAL" ){
351 nms->SetHistoERangeAndNBins(0, 15, 150) ;
352 anapi0ebe->SetHistoPtRangeAndNBins(0, 30, 60) ;
355 nms->SetHistoERangeAndNBins(0, 30, 200) ;
356 anapi0ebe->SetHistoPtRangeAndNBins(0, 30, 100) ;
358 // nms->SetHistoPtRangeAndNBins(0, 50, 100) ;
359 // nms->SetHistoAngleRangeAndNBins(0, 0.3, 100) ;
360 // nsm->SetHistoIMRangeAndNBins(0, 0.4, 100) ;
361 //Set Histrograms bins and ranges
362 // anapi0->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
363 // anapi0->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
364 if(kPrintSettings) anapi0ebe->Print("");
366 //-------------------------------------
367 //*** analysis the omega->pi0+gamma ***
368 //------------------------------------
369 AliAnaOmegaToPi0Gamma *anaomegaToPi0Gamma = new AliAnaOmegaToPi0Gamma();
370 anaomegaToPi0Gamma->SetDebug(-1);//10 for lots of messages
371 anaomegaToPi0Gamma->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
372 anaomegaToPi0Gamma->SetInputAODPhotonName(Form("Photons%s",calorimeter.Data()));
373 anaomegaToPi0Gamma->SetNPID(1);
374 anaomegaToPi0Gamma->SetNVtxZ(1);
375 anaomegaToPi0Gamma->SetNEventsMixed(4);
376 if(calorimeter=="PHOS")
377 anaomegaToPi0Gamma->SetPi0MassPeakWidthCut(0.008); // PHOS
378 else if(calorimeter=="EMCAL")
379 anaomegaToPi0Gamma->SetPi0MassPeakWidthCut(0.012); // EMCAL
380 anaomegaToPi0Gamma->SetHistoPtRangeAndNBins(0, 20, 100) ;
381 anaomegaToPi0Gamma->SetHistoMassRangeAndNBins(0, 1, 100) ;
382 anaomegaToPi0Gamma->SetPi0OverOmegaPtCut(0.8);
383 anaomegaToPi0Gamma->SetGammaOverOmegaPtCut(0.2);
384 if(kUseKinematics) anaomegaToPi0Gamma->SwitchOnDataMC() ;//Access MC stack and fill more histograms
385 else anaomegaToPi0Gamma->SwitchOffDataMC() ;//Access MC stack and fill more histograms
386 anaomegaToPi0Gamma->AddToHistogramsName(Form("AnaOmegaToPi0Gamma%s_",calorimeter.Data()));
387 if(kPrintSettings) anaomegaToPi0Gamma->Print("");
390 // //---------------------------------------------------------------------
392 // //---------------------------------------------------------------------
393 // if(calorimeter=="EMCAL"){
395 // AliAnaBtag *anabtag = new AliAnaBtag();
396 // anabtag->SetDebug(-1); //10 for lots of messages
397 // if(kUseKinematics){
398 // anabtag->SwitchOnDataMC();
399 // anabtag->SetMinPt(1.);
401 // anabtag->SetOutputAODName("ElectronsEMCAL");
402 // anabtag->SetOutputAODClassName("AliAODPWG4Particle");
403 // //anabtag->SetHistoPtRangeAndNBins(0, 100, 100) ;
404 // //anabtag->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
405 // //anabtag->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
406 // if(kPrintSettings)anabtag->Print("");
409 //==================================
410 // ### Isolation analysis ###
411 //=================================
413 AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
414 anaisol->SetDebug(-1);
415 anaisol->SetMinPt(0);
416 anaisol->SetInputAODName(Form("Photons%s",calorimeter.Data()));
417 anaisol->SetAODObjArrayName("ICPhoton");
418 anaisol->SetCalorimeter(calorimeter);
419 if(kUseKinematics) anaisol->SwitchOnDataMC() ;//Access MC stack and fill more histograms
420 else anaisol->SwitchOffDataMC() ;
421 //Select clusters with no pair, if both clusters with pi0 mass
422 anaisol->SwitchOffInvariantMass();
424 AliIsolationCut * ic = anaisol->GetIsolationCut();
425 ic->SetConeSize(0.4);
426 ic->SetPtThreshold(0.7);
427 ic->SetPtFraction(0.1);
428 ic->SetSumPtThreshold(1.0) ;
429 ic->SetParticleTypeInCone(AliIsolationCut::kOnlyCharged);
430 ic->SetICMethod(AliIsolationCut::kSumPtFracIC);
431 if(kPrintSettings) ic->Print("");
433 //Do or not do isolation with previously produced AODs.
434 //No effect if use of SwitchOnSeveralIsolation()
435 anaisol->SwitchOffReIsolation();
437 anaisol->SwitchOffSeveralIsolation() ;
438 //Set Histograms bins and ranges
439 anaisol->SetHistoPtRangeAndNBins(0, 50, 200) ;
440 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
441 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
442 anaisol->AddToHistogramsName("AnaIsolPhoton_");
443 if(kPrintSettings) anaisol->Print("");
446 AliAnaParticleIsolation *anaisolpi0 = new AliAnaParticleIsolation();
447 anaisolpi0->SetDebug(-1);
448 anaisolpi0->SetMinPt(0);
449 anaisolpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
450 anaisolpi0->AddToHistogramsName("AnaIsolPi0_");
451 anaisolpi0->SetAODObjArrayName("ICPi0");
452 anaisolpi0->SetCalorimeter(calorimeter);
453 if(kUseKinematics) anaisolpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
454 else anaisolpi0->SwitchOffDataMC() ;
455 //Select clusters with no pair, if both clusters with pi0 mass
456 anaisolpi0->SwitchOffInvariantMass();
458 AliIsolationCut * ic2 = anaisolpi0->GetIsolationCut();
459 ic2->SetConeSize(0.4);
460 ic2->SetPtThreshold(0.7);
461 ic2->SetPtFraction(0.1);
462 ic2->SetSumPtThreshold(1.0) ;
463 ic2->SetICMethod(AliIsolationCut::kSumPtFracIC);
464 ic2->SetParticleTypeInCone(AliIsolationCut::kOnlyCharged);
465 if(kPrintSettings) ic2->Print("");
466 //Do or not do isolation with previously produced AODs.
467 //No effect if use of SwitchOnSeveralIsolation()
468 anaisolpi0->SwitchOffReIsolation();
470 anaisolpi0->SwitchOffSeveralIsolation() ;
471 //Set Histograms bins and ranges
472 anaisolpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
473 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
474 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
475 if(kPrintSettings) anaisolpi0->Print("");
477 //===========================
478 //Correlation analysis
479 //===========================
481 // ### Correlation with Jet Finder AOD output
482 AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation();
483 anacorrjet->SetInputAODName(Form("Photons%s",calorimeter.Data()));
484 anacorrjet->SwitchOffFiducialCut();
485 anacorrjet->SetDebug(-1);
486 anacorrjet->SetConeSize(1);
487 anacorrjet->SelectIsolated(kTRUE); // do correlation with isolated photons
488 anacorrjet->SetPtThresholdInCone(0.2);
489 anacorrjet->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts
490 anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts
491 anacorrjet->UseJetRefTracks(kFALSE); //Not working now
492 //Set Histograms bins and ranges
493 anacorrjet->SetHistoPtRangeAndNBins(0, 50, 200) ;
494 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
495 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
496 if(kPrintSettings) anacorrjet->Print("");
498 // ### Correlation with hadrons
499 AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation();
500 anacorrhadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
501 anacorrhadron->AddToHistogramsName("AnaHadronCorrPhoton_");
502 anacorrhadron->SetAODObjArrayName("PhotonHadronCorr");
503 anacorrhadron->SetDebug(-1);
504 anacorrhadron->SwitchOffCaloPID();
506 anacorrhadron->SwitchOnFiducialCut();
507 AliFiducialCut * fidCut1stYear = anacorrhadron->GetFiducialCut();
508 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
509 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
510 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
511 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
512 fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
513 fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);
515 anacorrhadron->SwitchOnDecayCorr();
516 anacorrhadron->SetMultiBin(1);
517 anacorrhadron->SwitchOffNeutralCorr();
518 anacorrhadron->SwitchOffEventSelection();
519 anacorrhadron->SetPtCutRange(0.1,100);
520 anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
521 anacorrhadron->SwitchOnSeveralUECalculation();
522 anacorrhadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
523 anacorrhadron->SelectIsolated(kFALSE); // do correlation with isolated photons
524 if(kUseKinematics) anacorrhadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
525 else anacorrhadron->SwitchOffDataMC() ;
526 //if(calorimeter=="PHOS"){
527 //Correlate with particles in EMCAL
528 //anacorrhadron->SwitchOnCaloPID();
529 //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
531 //Set Histograms bins and ranges
532 anacorrhadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
533 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
534 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
535 if(kPrintSettings) anacorrhadron->Print("");
537 // ### Correlation with hadrons
538 AliAnaParticleHadronCorrelation *anacorrisohadron = new AliAnaParticleHadronCorrelation();
539 anacorrisohadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
540 anacorrisohadron->AddToHistogramsName("AnaHadronCorrIsoPhoton_");
541 anacorrisohadron->SetAODObjArrayName("IsoPhotonHadronCorr");
542 anacorrisohadron->SetDebug(-1);
543 anacorrisohadron->SwitchOffCaloPID();
545 anacorrisohadron->SwitchOnFiducialCut();
546 AliFiducialCut * fidCut1stYear = anacorrisohadron->GetFiducialCut();
547 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
548 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
549 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
550 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
551 fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
552 fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);
554 anacorrisohadron->SwitchOnDecayCorr();
555 anacorrisohadron->SetMultiBin(1);
556 anacorrisohadron->SwitchOffNeutralCorr();
557 anacorrisohadron->SwitchOffEventSelection();
558 anacorrisohadron->SetPtCutRange(0.1,100);
559 anacorrisohadron->SetDeltaPhiCutRange(1.5,4.5);
560 anacorrisohadron->SwitchOnSeveralUECalculation();
561 anacorrisohadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
562 anacorrisohadron->SelectIsolated(kTRUE); // do correlation with isolated photons
563 if(kUseKinematics) anacorrisohadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
564 else anacorrisohadron->SwitchOffDataMC() ;
565 //if(calorimeter=="PHOS"){
566 //Correlate with particles in EMCAL
567 //anacorrhadron->SwitchOnCaloPID();
568 //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
570 //Set Histograms bins and ranges
571 anacorrisohadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
572 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
573 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
574 if(kPrintSettings) anacorrisohadron->Print("");
577 // ### Pi0 Correlation with hadrons, not isolated
578 AliAnaParticleHadronCorrelation *anacorrhadronpi0 = new AliAnaParticleHadronCorrelation();
579 anacorrhadronpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
580 anacorrhadronpi0->AddToHistogramsName("AnaHadronCorrPi0_");
581 anacorrhadronpi0->SetAODObjArrayName("Pi0HadronCorr");
582 anacorrhadronpi0->SetDebug(-1);
583 anacorrhadronpi0->SwitchOffCaloPID();
585 anacorrhadronpi0->SwitchOnFiducialCut();
586 AliFiducialCut * fidCut1stYear = anacorrhadronpi0->GetFiducialCut();
587 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
588 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
589 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
590 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
591 fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
592 fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);
594 anacorrhadronpi0->SwitchOnDecayCorr();
595 anacorrhadronpi0->SetMultiBin(1);
596 anacorrhadronpi0->SwitchOffNeutralCorr();
597 anacorrhadronpi0->SwitchOffEventSelection();
598 anacorrhadronpi0->SetPtCutRange(0.1,100);
599 anacorrhadronpi0->SetDeltaPhiCutRange(1.5,4.5);
600 anacorrhadronpi0->SelectIsolated(kFALSE); // do correlation with non isolated pi0
601 anacorrhadronpi0->SwitchOnSeveralUECalculation();
602 anacorrhadronpi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
603 if(kUseKinematics) anacorrhadronpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
604 else anacorrhadronpi0->SwitchOffDataMC() ;
605 //if(calorimeter=="PHOS"){
606 // //Correlate with particles in EMCAL
607 // anacorrhadronpi0->SwitchOnCaloPID();
608 // anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
610 //Set Histograms bins and ranges
611 anacorrhadronpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
612 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
613 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
614 if(kPrintSettings) anacorrhadronpi0->Print("");
616 // ### Pi0 Correlation with hadrons, isolated
617 AliAnaParticleHadronCorrelation *anacorrhadronisopi0 = new AliAnaParticleHadronCorrelation();
618 anacorrhadronisopi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
619 anacorrhadronisopi0->AddToHistogramsName("AnaHadronCorrIsoPi0_");
620 anacorrhadronisopi0->SetAODObjArrayName("IsoPi0HadronCorr");
621 anacorrhadronisopi0->SetDebug(-1);
622 anacorrhadronisopi0->SwitchOffCaloPID();
624 anacorrhadronisopi0->SwitchOnFiducialCut();
625 AliFiducialCut * fidCut1stYear = anacorrhadronisopi0->GetFiducialCut();
626 fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
627 fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
628 fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
629 fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
630 fidCut1stYear->DoCTSFiducialCut(kTRUE) ;
631 fidCut1stYear->SetSimpleCTSFiducialCut(0.8,0.,360.);
633 anacorrhadronisopi0->SwitchOnDecayCorr();
634 anacorrhadronisopi0->SetMultiBin(1);
635 anacorrhadronisopi0->SwitchOffNeutralCorr();
636 anacorrhadronisopi0->SwitchOffEventSelection();
637 anacorrhadronisopi0->SetPtCutRange(0.1,100);
638 anacorrhadronisopi0->SetDeltaPhiCutRange(1.5,4.5);
639 anacorrhadronisopi0->SelectIsolated(kTRUE); // do correlation with isolated pi0
640 anacorrhadronisopi0->SwitchOnSeveralUECalculation();
641 anacorrhadronisopi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
642 if(kUseKinematics) anacorrhadronisopi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
643 else anacorrhadronisopi0->SwitchOffDataMC() ;
644 //if(calorimeter=="PHOS"){
645 // //Correlate with particles in EMCAL
646 // anacorrhadronpi0->SwitchOnCaloPID();
647 // anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
649 //Set Histograms bins and ranges
650 anacorrhadronisopi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
651 // ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
652 // ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
653 if(kPrintSettings) anacorrhadronisopi0->Print("");
656 // #### Configure Maker ####
657 AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
658 maker->SetReader(reader);//pointer to reader
659 maker->SetCaloUtils(cu); //pointer to calorimeter utils
662 Int_t n = 0;//Analysis number, order is important
663 // Particle selection analysis
664 maker->AddAnalysis(anaphoton,n++);
665 //maker->AddAnalysis(anapi0,n++);
666 maker->AddAnalysis(anapi0ebe,n++);
667 // maker->AddAnalysis(anaomegaToPi0Gamma,n++);
668 //if(calorimeter=="EMCAL")maker->AddAnalysis(anabtag,n++);
669 // Isolation analysis
670 maker->AddAnalysis(anaisol,n++);
671 maker->AddAnalysis(anaisolpi0,n++);
672 // Correlation analysis
673 // maker->AddAnalysis(anacorrjet,n++);
674 maker->AddAnalysis(anacorrhadron,n++);
675 maker->AddAnalysis(anacorrhadronpi0,n++);
676 maker->AddAnalysis(anacorrisohadron,n++);
677 maker->AddAnalysis(anacorrhadronisopi0,n);
678 maker->SetAnaDebug(0) ;
679 maker->SwitchOnHistogramsMaker() ;
680 if(inputDataType.Contains("delta")) maker->SwitchOffAODsMaker() ;
681 else maker->SwitchOnAODsMaker() ;
683 if(kPrintSettings) maker->Print("");
685 printf("======================== \n");
686 printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data());
687 printf("======================== \n");
690 //===========================================================================
691 AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (Form("PartCorr%s",calorimeter.Data()));
692 task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
693 //task->SetDebugLevel(-1);
694 task->SetAnalysisMaker(maker);
695 if(inputDataType=="ESD" && !kSimulation) task->SelectCollisionCandidates(); //AliPhysicsSelection has to be attached before.
700 sprintf(name,"PartCorr_%s",calorimeter.Data());
701 cout<<"Name of task "<<name<<endl;
702 //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
703 // AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
705 TString outputfile = AliAnalysisManager::GetCommonFileName();
707 // AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr_%s",calorimeter.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr_%s",outputfile.Data(),calorimeter.Data()));
708 AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(calorimeter.Data(), TList::Class(),
709 AliAnalysisManager::kOutputContainer,
710 Form("%s:PartCorr",outputfile.Data()));
712 AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("%sCuts",calorimeter.Data()), TList::Class(),
713 AliAnalysisManager::kParamContainer,
714 Form("%s:PartCorrCuts",outputfile.Data()));
716 // Create ONLY the output containers for the data produced by the task.
717 // Get and connect other common input/output containers via the manager as below
718 //==============================================================================
719 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
720 // AOD output slot will be used in a different way in future
721 if(!inputDataType.Contains("delta") && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
722 mgr->ConnectOutput (task, 1, cout_pc);
723 mgr->ConnectOutput (task, 2, cout_cuts);