2 Bool_t kPrint = kFALSE;
3 Bool_t kSimulation = kFALSE;
4 Bool_t kUseKinematics = kFALSE;
5 Bool_t kOutputAOD = kFALSE;
6 Bool_t kEventSelection= kFALSE;
7 Bool_t kExotic = kTRUE;
8 Bool_t kNonLinearity = kFALSE;
10 TString kCollisions = "pp";
11 TString kTrig = "EMC7" ;
12 TString kClusterArray = "";
13 TString kData = ""; // MC or deltaAOD
14 TString kInputDataType = "ESD";
15 TString kCalorimeter = "EMCAL";
17 Bool_t kRecalTM = kTRUE;
23 Bool_t kHadronAN = kFALSE;
24 Bool_t kCalibE = kTRUE;
25 Bool_t kCalibT = kTRUE;
26 Bool_t kBadMap = kTRUE;
27 Bool_t kTender = kFALSE;
29 Int_t kRunNumber = -1;
31 AliAnalysisTaskCaloTrackCorrelation *AddTaskCaloTrackCorr(const TString data = "",
32 const TString calorimeter = "EMCAL",
33 const Bool_t simulation = kFALSE,
34 const Bool_t eventsel = kFALSE,
35 const Bool_t exotic = kTRUE,
36 const Bool_t nonlin = kFALSE,
37 TString outputfile = "",
38 const Int_t year = 2010,
39 const TString col = "pp",
40 const TString trigger = "MB",
41 const TString clustersArray = "V1",
42 const Bool_t mix = kTRUE,
43 const Bool_t recaltm = kTRUE,
44 const Bool_t tm = kTRUE,
45 const Int_t minCen = -1,
46 const Int_t maxCen = -1,
47 const Bool_t qaan = kFALSE,
48 const Bool_t hadronan = kFALSE,
49 const Bool_t calibE = kTRUE,
50 const Bool_t badmap = kTRUE,
51 const Bool_t calibT = kTRUE,
52 const Bool_t tender = kFALSE,
53 const Bool_t outputAOD = kFALSE,
54 const Bool_t printSettings = kFALSE,
55 const Double_t scaleFactor = -1,
56 const Int_t runNumber = -1
59 // Creates a CaloTrackCorr task, configures it and adds it to the analysis manager.
61 kPrint = printSettings;
62 kSimulation = simulation;
66 kNonLinearity = nonlin;
68 kClusterArray = clustersArray;
70 kCalorimeter = calorimeter;
71 kOutputAOD = outputAOD;
76 kEventSelection= eventsel;
84 kRunNumber = runNumber;
86 // Get the pointer to the existing analysis manager via the static access method.
88 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
91 ::Error("AddTask", "No analysis manager to connect to.");
95 // Check the analysis type using the event handlers connected to the analysis manager.
97 if (!mgr->GetInputEventHandler())
99 ::Error("AddTask", "This task requires an input event handler");
103 // Make sure the B field is enabled for track selection, some cuts need it
104 ((AliInputEventHandler*)mgr->GetInputEventHandler())->SetNeedField(kTRUE);
106 kInputDataType = "AOD";
107 if(!kData.Contains("delta"))
108 kInputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
112 kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
113 if (!kUseKinematics && data=="AOD" && kInputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ...
116 cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
118 // Name for containers
120 kName = Form("%s_Trig%s_Cl%s_TM%d",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kTM);
122 if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);
124 printf("<<<< NAME: %s >>>>>\n",kName.Data());
126 // #### Configure analysis ####
128 AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
130 maker->SetScaleFactor(scaleFactor); // for MC, negative (not scaled) by default
132 // General frame setting and configuration
133 maker->SetReader (ConfigureReader() );
134 maker->SetCaloUtils(ConfigureCaloUtils());
136 // Analysis tasks setting and configuration
137 Int_t n = 0;//Analysis number, order is important
139 // Isolation settings
140 Int_t partInCone = AliIsolationCut::kNeutralAndCharged; // kOnlyCharged;
141 Int_t thresType = AliIsolationCut::kPtThresIC;// AliIsolationCut::kSumPtFracIC ;
147 maker->AddAnalysis(ConfigurePhotonAnalysis(), n++); // Photon cluster selection
149 // Invariant mass analysis Put here to tag selected photons as decay
150 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kIMCalo), n++); // Pi0 event by event selection, invariant mass and photon tagging from decay
151 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Eta", AliAnaPi0EbE::kIMCalo), n++); // Eta event by event selection, invariant mass and photon tagging from decay
154 maker->AddAnalysis(ConfigureIsolationAnalysis("Photon", partInCone,thresType,cone, pth), n++); // Photon isolation
155 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Photon",kFALSE), n++); // Gamma hadron correlation
156 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Photon",kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated gamma hadron correlation
157 //maker->AddAnalysis(ConfigureIsolationAnalysis("Photon", partInCone,thresType,kTRUE), n++); // Photon multi isolation, leave it the last
160 // Split cluster analysis
161 if(kCalorimeter == "EMCAL")
163 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kSSCalo), n++); // Pi0 event by event selection, cluster splitting
164 maker->AddAnalysis(ConfigureIsolationAnalysis("Pi0SS", partInCone,thresType,cone, pth), n++); // Pi0 isolation, cluster splits
165 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0SS" ,kFALSE), n++); // Pi0 hadron correlation
166 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0SS" ,kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated pi0 hadron correlation
167 //maker->AddAnalysis(ConfigureIsolationAnalysis("Pi0SS", partInCone,thresType,kTRUE), n++); // Pi0 multi isolation, split cluster
168 maker->AddAnalysis(ConfigureInClusterIMAnalysis(kTRUE , kTRUE ), n++);
171 // Invariant mass analysis
172 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0SideBand", AliAnaPi0EbE::kIMCalo), n++); // Pi0 event by event selection, and photon tagging from decay
173 maker->AddAnalysis(ConfigureIsolationAnalysis("Pi0", partInCone,thresType,cone, pth), n++); // Pi0 isolation, invariant mass
174 maker->AddAnalysis(ConfigureIsolationAnalysis("Pi0SideBand", partInCone,thresType,cone, pth), n++); // Pi0 isolation, side band
175 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0" ,kFALSE), n++); // Pi0 hadron correlation
176 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0" ,kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated pi0 hadron correlation
177 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0SideBand" ,kFALSE), n++); // Pi0 hadron correlation
178 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Pi0SideBand" ,kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated pi0 hadron correlation
179 //maker->AddAnalysis(ConfigureIsolationAnalysis("Pi0", partInCone,thresType,kTRUE), n++); // Pi0 multi isolation, invariant mass, leave it the last
183 maker->AddAnalysis(ConfigureChargedAnalysis(), n++); // track selection
184 maker->AddAnalysis(ConfigureIsolationAnalysis("Hadron",AliIsolationCut::kOnlyCharged,thresType,cone, pth), n++); // track isolation
185 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Hadron",kFALSE), n++); // track-track correlation
186 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("Hadron",kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated track-track correlation
187 //maker->AddAnalysis(ConfigureIsolationAnalysis("Hadron",partInCone,thresType,kTRUE), n++);// Hadron multi isolation
190 // Analysis with ghost triggers, only for Min Bias like events
191 if( kTrig.Contains("INT") || kTrig.Contains("Central") || kTrig.Contains("MB") )
193 maker->AddAnalysis(ConfigureRandomTriggerAnalysis(), n++);
194 maker->AddAnalysis(ConfigureIsolationAnalysis(Form("RandomTrigger%s",kCalorimeter.Data()), partInCone,thresType,cone, pth), n++); // Ghost trigger isolation
195 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis(Form("RandomTrigger%s",kCalorimeter.Data()),kFALSE), n++); // Ghost trigger hadron correlation
196 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis(Form("RandomTrigger%s",kCalorimeter.Data()),kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated ghost hadron correlation
197 //maker->AddAnalysis(ConfigureIsolationAnalysis(Form("RandomTrigger%s",kCalorimeter.Data()), partInCone,thresType,kTRUE), n++); // Ghost multi isolation
201 maker->AddAnalysis(ConfigureRandomTriggerAnalysis("CTS"), n++); // track selection
202 maker->AddAnalysis(ConfigureIsolationAnalysis("RandomTriggerCTS",AliIsolationCut::kOnlyCharged,thresType,cone, pth), n++); // track isolation
203 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("RandomTriggerCTS",kFALSE), n++); // track-track correlation
204 maker->AddAnalysis(ConfigureHadronCorrelationAnalysis("RandomTriggerCTS",kTRUE,partInCone,thresType, cone, pth) , n++); // Isolated track-track correlation
205 //maker->AddAnalysis(ConfigureIsolationAnalysis("RandomTriggerCTS",AliIsolationCut::kOnlyCharged,thresType,kTRUE), n++); // Ghost multi isolation
209 if(kQA) maker->AddAnalysis(ConfigureQAAnalysis(),n++);
211 maker->SetAnaDebug(kDebug) ;
212 maker->SwitchOnHistogramsMaker() ;
213 if(kData.Contains("delta")) maker->SwitchOffAODsMaker() ;
214 else maker->SwitchOnAODsMaker() ;
216 if(kPrint) maker->Print("");
218 if(kSimulation) maker->SwitchOffDataControlHistograms();
220 printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, kCalorimeter.Data());
224 AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("CaloTrackCorr%s",kName.Data()));
225 task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
226 task->SetDebugLevel(kDebug);
227 task->SetBranches("ESD:AliESDRun.,AliESDHeader");
228 task->SetAnalysisMaker(maker);
233 if(outputfile.Length()==0) outputfile = AliAnalysisManager::GetCommonFileName();
235 AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(kName, TList::Class(),
236 AliAnalysisManager::kOutputContainer,
237 Form("%s",outputfile.Data()));
239 AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("Param_%s",kName.Data()), TList::Class(),
240 AliAnalysisManager::kParamContainer,
241 "AnalysisParameters.root");
243 // Create ONLY the output containers for the data produced by the task.
244 // Get and connect other common input/output containers via the manager as below
245 //==============================================================================
246 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
247 // AOD output slot will be used in a different way in future
248 if(!kData.Contains("delta") && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
249 mgr->ConnectOutput (task, 1, cout_pc);
250 mgr->ConnectOutput (task, 2, cout_cuts);
254 UInt_t mask = SetTriggerMaskFromName();
255 task->SelectCollisionCandidates(mask);
261 //____________________________________
262 AliCaloTrackReader * ConfigureReader()
265 AliCaloTrackReader * reader = 0;
266 if (kInputDataType == "ESD"&& kData=="MC" )
267 reader = new AliCaloTrackMCReader();
268 else if(kInputDataType=="AOD" || kData.Contains("AOD"))
269 reader = new AliCaloTrackAODReader();
270 else if(kInputDataType=="ESD")
271 reader = new AliCaloTrackESDReader();
273 printf("AliCaloTrackReader::ConfigureReader() - Data combination not known kData=%s, kInputData=%s\n",kData.Data(),kInputDataType.Data());
275 reader->SetDebug(kDebug);//10 for lots of messages
280 // Event rejection cuts for jet-jet simulations
281 reader->SetPtHardAndJetPtComparison(kTRUE);
282 reader->SetPtHardAndJetPtFactor(4);
284 reader->SetPtHardAndClusterPtComparison(kTRUE);
285 reader->SetPtHardAndClusterPtFactor(1.5);
290 //reader->SetDeltaAODFileName("");
291 if(kOutputAOD) reader->SwitchOnWriteDeltaAOD() ;
295 if(kInputDataType == "ESD"){
296 reader->SwitchOnStack();
297 reader->SwitchOffAODMCParticles();
299 else if(kInputDataType == "AOD"){
300 reader->SwitchOffStack();
301 reader->SwitchOnAODMCParticles();
305 //------------------------
306 // Detector input filling
307 //------------------------
309 //Min cluster/track E
310 reader->SetEMCALEMin(0.3);
311 reader->SetEMCALEMax(1000);
312 reader->SetPHOSEMin(0.3);
313 reader->SetPHOSEMax(1000);
314 reader->SetCTSPtMin(0.2);
315 reader->SetCTSPtMax(1000);
320 reader->SwitchOffUseTrackTimeCut();
321 reader->SwitchOffUseParametrizedTimeCut();
322 reader->SwitchOffUseEMCALTimeCut();
323 reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
329 printf("Set time cut parameters for run %d\n",kRunNumber);
330 reader->SwitchOnUseEMCALTimeCut();
331 reader->SwitchOnUseParametrizedTimeCut();
334 reader->SetEMCALTimeCut(-25,20);
337 if (kRunNumber >= 151636 && kRunNumber <= 155384 )
339 printf("Set time parameters for LHC11c");
340 reader->SetEMCALParametrizedMinTimeCut(0,-5 ); reader->SetEMCALParametrizedMinTimeCut(1,-1 ); reader->SetEMCALParametrizedMinTimeCut(2, 1.87); reader->SetEMCALParametrizedMinTimeCut(3, 0.4);
341 reader->SetEMCALParametrizedMaxTimeCut(0, 3.5); reader->SetEMCALParametrizedMaxTimeCut(1, 50); reader->SetEMCALParametrizedMaxTimeCut(2, 0.15); reader->SetEMCALParametrizedMaxTimeCut(3, 1.6);
343 else if(kRunNumber >= 156447 && kRunNumber <= 159635 )
345 printf("Set time parameters for LHC11d");
346 reader->SetEMCALParametrizedMinTimeCut(0,-5); reader->SetEMCALParametrizedMinTimeCut(1,-1 ); reader->SetEMCALParametrizedMinTimeCut(2, 3.5 ); reader->SetEMCALParametrizedMinTimeCut(3, 1. );
347 reader->SetEMCALParametrizedMaxTimeCut(0, 5); reader->SetEMCALParametrizedMaxTimeCut(1, 50); reader->SetEMCALParametrizedMaxTimeCut(2, 0.45); reader->SetEMCALParametrizedMaxTimeCut(3, 1.25);
351 reader->SwitchOffUseParametrizedTimeCut();
356 reader->SwitchOffUseParametrizedTimeCut();
357 reader->SwitchOffUseEMCALTimeCut();
358 reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
362 reader->SwitchOnFiducialCut();
363 reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;
366 reader->SwitchOnCTS();
367 reader->SwitchOffRejectNoTrackEvents();
369 reader->SwitchOffRecalculateVertexBC();
370 reader->SwitchOffVertexBCEventSelection();
372 reader->SwitchOffUseTrackTimeCut();
373 reader->SetTrackTimeCut(0,50);
375 reader->SwitchOffUseTrackDCACut();
376 //reader->SetTrackDCACut(0,0.0105);
377 //reader->SetTrackDCACut(1,0.035);
378 //reader->SetTrackDCACut(2,1.1);
380 if(kInputDataType=="ESD")
382 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
383 //AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10041004);
384 //reader->SetTrackCuts(esdTrackCuts);
385 //reader->SwitchOnConstrainTrackToVertex();
390 AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10001008);
391 reader->SetTrackCuts(esdTrackCuts);
392 AliESDtrackCuts * esdTrackCuts2 = CreateTrackCutsPWGJE(10011008);
393 reader->SetTrackComplementaryCuts(esdTrackCuts2);
398 AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10001006);
399 reader->SetTrackCuts(esdTrackCuts);
400 AliESDtrackCuts * esdTrackCuts2 = CreateTrackCutsPWGJE(10041006);
401 reader->SetTrackComplementaryCuts(esdTrackCuts2);
404 else if(kInputDataType=="AOD")
406 //reader->SetTrackFilterMask(128); // Filter bit, not mask, use if off hybrid
407 reader->SwitchOnAODHybridTrackSelection(); // Check that the AODs have Hybrids!!!!
408 reader->SetTrackStatus(AliVTrack::kITSrefit);
409 //reader->SwitchOnTrackHitSPDSelection(); // Check that the track has at least a hit on the SPD, not much sense to use for hybrid or TPC only tracks
414 reader->SetEMCALClusterListName(kClusterArray);
415 if(kClusterArray == "" && !kTender)
417 printf("**************** Standard EMCAL clusters branch analysis **************** \n");
418 reader->SwitchOnClusterRecalculation();
419 // Check in ConfigureCaloUtils that the recalibration and bad map are ON
423 printf("**************** Input for analysis is Clusterizer %s **************** \n", kClusterArray.Data());
424 reader->SwitchOffClusterRecalculation();
427 if(!kNonLinearity) reader->SwitchOffClusterELinearityCorrection();
429 //if(kCalorimeter == "EMCAL") {
430 reader->SwitchOnEMCALCells();
431 reader->SwitchOnEMCAL();
433 //if(kCalorimeter == "PHOS") {
434 reader->SwitchOnPHOSCells();
435 reader->SwitchOnPHOS();
438 // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
439 if(kData.Contains("delta"))
441 reader->SwitchOffEMCAL();
442 reader->SwitchOffPHOS();
443 reader->SwitchOffEMCALCells();
444 reader->SwitchOffPHOSCells();
451 //reader->RejectFastClusterEvents() ;
453 // Event triggered selection settings
454 reader->SwitchOnTriggerPatchMatching();
455 reader->SwitchOnBadTriggerEventsRemoval(); // only if SwitchOnTriggerPatchMatching();
456 reader->SwitchOnUnMatchedTriggerEventsRemoval(); // only if SwitchOnBadTriggerEventsRemoval();
457 //reader->SwitchOffTriggerClusterTimeRecal() ;
459 reader->SetTriggerPatchTimeWindow(8,9); // L0
460 if (kRunNumber < 146861) reader->SetEventTriggerL0Threshold(3.);
461 else if(kRunNumber < 154000) reader->SetEventTriggerL0Threshold(4.);
462 else if(kRunNumber < 165000) reader->SetEventTriggerL0Threshold(5.5);
464 //redefine for other periods, triggers
466 //if(!kUseKinematics) reader->SetFiredTriggerClassName("CEMC7EGA-B-NOPF-CENTNOTRD"); // L1 Gamma
468 // For mixing with AliAnaParticleHadronCorrelation switch it off
471 reader->SwitchOffEventTriggerAtSE();
472 UInt_t mask = SetTriggerMaskFromName();
473 reader->SetEventTriggerMask(mask); // Only for mixing and SwitchOffEventTriggerAtSE();
474 //reader->SetMixEventTriggerMask(AliVEvent::kMB); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
475 reader->SetMixEventTriggerMask(AliVEvent::kAnyINT); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
477 printf("---Trigger selection done in AliCaloTrackReader!!!\n");
480 reader->SwitchOnEventTriggerAtSE();
482 reader->SetZvertexCut(10.); // Open cut
483 reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex
487 reader->SwitchOnEventPileUpRejection(); // remove pileup by default
488 reader->SwitchOnV0ANDSelection() ; // and besides v0 AND
492 reader->SwitchOffPileUpEventRejection();// remove pileup by default
493 reader->SwitchOffV0ANDSelection() ; // and besides v0 AND
496 if(kCollisions=="PbPb")
499 reader->SetCentralityClass("V0M");
500 reader->SetCentralityOpt(100); // 10 (c= 0-10, 10-20 ...), 20 (c= 0-5, 5-10 ...) or 100 (c= 1, 2, 3 ..)
501 reader->SetCentralityBin(kMinCen,kMaxCen); // Accept all events, if not select range
503 // Event plane (only used in Maker and mixing for AliAnaPi0/AliAnaHadronCorrelation for the moment)
504 reader->SetEventPlaneMethod("V0");
507 if(kPrint) reader->Print("");
513 //_______________________________________
514 AliCalorimeterUtils* ConfigureCaloUtils()
517 AliCalorimeterUtils *cu = new AliCalorimeterUtils;
518 cu->SetDebug(kDebug);
520 // Remove clusters close to borders, at least max energy cell is 1 cell away
521 cu->SetNumberOfCellsFromEMCALBorder(1);
522 cu->SetNumberOfCellsFromPHOSBorder(2);
524 // Search of local maxima in cluster
525 if(kCollisions=="pp")
527 cu->SetLocalMaximaCutE(0.1);
528 cu->SetLocalMaximaCutEDiff(0.03);
529 if(kName.Contains("150"))
531 printf("Reclusterize with 150 threshold, set PbPb settings\n");
532 cu->SetLocalMaximaCutE(0.2);
533 cu->SetLocalMaximaCutEDiff(0.03);
538 cu->SetLocalMaximaCutE(0.2);
539 cu->SetLocalMaximaCutEDiff(0.03);
542 cu->SwitchOffClusterPlot();
544 if(kRecalTM) cu->SwitchOnRecalculateClusterTrackMatching(); // Done in clusterization
545 else cu->SwitchOffRecalculateClusterTrackMatching();
547 cu->SwitchOnBadChannelsRemoval() ;
552 cu->SwitchOnLoadOwnEMCALGeometryMatrices();
554 AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
558 cu->SwitchOnRecalibration(); // Check the reader if it is taken into account during filtering
559 if(kClusterArray == "" && !kTender) cu->SwitchOnRunDepCorrection();
562 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C");
563 ConfigureEMCALRecoUtils(recou,
566 kTRUE,//kNonLinearity,
570 //recou->SetExoticCellDiffTimeCut(50.);
575 printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
576 cu->SwitchOnCorrectClusterLinearity();
579 printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
580 printf("ConfigureCaloUtils() - EMCAL BadMap ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
583 if(kCalorimeter=="PHOS")
585 if (kYears < 2014) cu->SetNumberOfSuperModulesUsed(3);
586 else cu->SetNumberOfSuperModulesUsed(4);
590 if (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
591 else if (kYears < 2014) cu->SetNumberOfSuperModulesUsed(10);
592 else cu->SetNumberOfSuperModulesUsed(20);
596 cu->SwitchOffLoadOwnPHOSGeometryMatrices();
598 if(kPrint) cu->Print("");
604 //_____________________________________
605 AliAnaPhoton* ConfigurePhotonAnalysis()
608 AliAnaPhoton *ana = new AliAnaPhoton();
609 ana->SetDebug(kDebug); //10 for lots of messages
611 // cluster selection cuts
613 ana->SwitchOffFiducialCut();
615 ana->SetCalorimeter(kCalorimeter);
617 if(kCalorimeter == "PHOS")
619 ana->SetNCellCut(2);// At least 3 cells
621 ana->SetMinDistanceToBadChannel(2, 4, 5);
622 ana->SetTimeCut(-1e10,1e10); // open cut
626 ana->SetNCellCut(1);// At least 2 cells
627 ana->SetMinEnergy(0.3); // avoid mip peak at E = 260 MeV
628 ana->SetMaxEnergy(1000);
629 ana->SetTimeCut(-1e10,1e10); // open cut, usual time window of [425-825] ns if time recalibration is off
630 // restrict to less than 100 ns when time calibration is on
631 ana->SetMinDistanceToBadChannel(2, 4, 6);
633 // NLM cut, used in all, exclude clusters with more than 2 maxima
634 // Not needed if M02 cut is already strong or clusterizer V2
635 ana->SetNLMCut(1, 2) ;
640 ana->SwitchOnTrackMatchRejection() ;
641 ana->SwitchOffTMHistoFill() ;
645 ana->SwitchOffTrackMatchRejection() ;
646 ana->SwitchOnTMHistoFill() ;
649 //PID cuts (shower shape)
650 ana->SwitchOnCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
651 AliCaloPID* caloPID = ana->GetCaloPID();
652 //Not used in bayesian
655 caloPID->SetEMCALLambda0CutMax(0.27);
656 caloPID->SetEMCALLambda0CutMin(0.10);
658 caloPID->SetEMCALDEtaCut(0.025);
659 caloPID->SetEMCALDPhiCut(0.030);
662 caloPID->SetPHOSDispersionCut(2.5);
663 caloPID->SetPHOSRCut(2.);
664 if(kInputData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
666 ana->SwitchOffFillShowerShapeHistograms(); // Filled before photon shower shape selection
667 if(!kSimulation)ana->SwitchOnFillPileUpHistograms();
668 //if(!kSimulation) ana->SwitchOnFillEMCALBCHistograms();
670 // Input / output delta AOD settings
672 if(!kData.Contains("delta"))
674 ana->SetOutputAODName(Form("Photon%s",kName.Data()));
675 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
676 //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
678 else ana->SetInputAODName(Form("Photon%s",kName.Data()));
680 //Set Histograms name tag, bins and ranges
682 ana->AddToHistogramsName(Form("AnaPhoton_TM%d_",kTM));
683 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
685 // Number of particle type MC histograms
686 ana->FillNOriginHistograms(20);
687 ana->FillNPrimaryHistograms(20);
689 ana->SwitchOnRealCaloAcceptance(); // primary particle acceptance histograms
692 if(kPrint) ana->Print("");
698 //________________________________________________________________
699 AliAnaEMCALTriggerClusters* ConfigureEMCALTriggerClusterAnalysis()
701 // For filling all histograms meaninfully, in the reader, time cut must be off
702 // and bad triggered events not rejected, and of course analyze triggered events.
704 AliAnaEMCALTriggerClusters *ana = new AliAnaEMCALTriggerClusters();
705 ana->SetDebug(kDebug); //10 for lots of messages
707 // cluster selection cuts
709 ana->SwitchOffFiducialCut();
710 ana->SetNCellCut(1);// At least 2 cells
711 ana->SetMinEnergy(0.3); // avoid mip peak at E = 260 MeV
712 ana->SetMaxEnergy(1000);
714 ana->SwitchOnTrackMatchRejection() ;
716 ana->AddToHistogramsName("EMCTriggerClusters_");
717 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
719 if(kPrint) ana->Print("");
725 //___________________________________________________
726 AliAnaClusterPileUp* ConfigureClusterPileUpAnalysis()
728 // For filling all histograms meaninfully, in the reader, time cut must be off
729 // and bad triggered events in different BC not rejected
731 AliAnaClusterPileUp *ana = new AliAnaClusterPileUp();
732 ana->SetDebug(kDebug); //10 for lots of messages
734 // cluster selection cuts
736 ana->SwitchOffFiducialCut();
737 ana->SetNCellCut(1);// At least 2 cells
738 ana->SetMinEnergy(0.3); // avoid mip peak at E = 260 MeV
739 ana->SetMaxEnergy(1000);
741 ana->AddToHistogramsName("ClusterPileUp_");
742 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
744 if(kPrint) ana->Print("");
750 //________________________________________________________________________________
751 AliAnaElectron* ConfigureElectronAnalysis()
754 AliAnaElectron *ana = new AliAnaElectron();
755 ana->SetDebug(kDebug); //10 for lots of messages
757 ana->FillAODWithElectrons();
758 //ana->FillAODWithHadrons();
759 //ana->FillAODWithAny();
761 if(kCalorimeter == "PHOS")
763 ana->SetNCellCut(2);// At least 2 cells
765 ana->SetMinDistanceToBadChannel(2, 4, 5);
769 ana->SetNCellCut(1);// At least 2 cells
770 ana->SetMinPt(0.5); // no effect minium EMCAL cut.
772 //ana->SetTimeCut(400,900);// Time window of [400-900] ns
773 ana->SetMinDistanceToBadChannel(2, 4, 6);
776 //Electron selection cuts with tracks
777 ana->SetEOverP(0.85, 1.2);
779 // TO DO, find a more suitable way to set this
780 if (kRunNumber < 146861) ana->SetdEdxCut(72, 90);
781 else if(kRunNumber < 154000) ana->SetdEdxCut(54, 70);
782 else ana->SetdEdxCut(74, 90);
784 if(kSimulation) ana->SetdEdxCut(80, 100);
786 ana->SetCalorimeter(kCalorimeter);
788 ana->SwitchOnCaloPID();
790 AliCaloPID* caloPID = ana->GetCaloPID();
792 caloPID->SetEMCALLambda0CutMax(0.27);
793 caloPID->SetEMCALLambda0CutMin(0.10);
795 ana->SwitchOffFillShowerShapeHistograms();
796 ana->SwitchOffFillWeightHistograms() ;
797 ana->SwitchOffFiducialCut();
799 if(!kData.Contains("delta"))
801 ana->SetOutputAODName(Form("Electron%s",kName.Data()));
802 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
804 else ana->SetInputAODName(Form("Electron%s",kName.Data()));
806 //Set Histograms name tag, bins and ranges
808 ana->AddToHistogramsName(Form("AnaElectron_TM%d_",kTM));
809 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
813 if(kPrint) ana->Print("");
819 //__________________________________________________________________________________________
820 AliAnaRandomTrigger* ConfigureRandomTriggerAnalysis(TString detector = "")
823 AliAnaRandomTrigger *ana = new AliAnaRandomTrigger();
824 ana->SetDebug(kDebug); //10 for lots of messages
826 if(detector=="") detector = kCalorimeter;
827 ana->SetTriggerDetector(detector);
833 if (detector=="EMCAL")
835 ana->SetEtaCut(-0.71,0.71);
836 ana->SetPhiCut(100*TMath::DegToRad(), 160*TMath::DegToRad());
838 else if(detector=="PHOS")
840 ana->SetEtaCut(-0.13,0.13);
841 ana->SetPhiCut(260*TMath::DegToRad(), 320*TMath::DegToRad());
843 else if(detector=="CTS")
845 ana->SetEtaCut(-0.9,0.9);
846 ana->SetPhiCut(0, TMath::TwoPi());
850 if(!kData.Contains("delta"))
852 ana->SetOutputAODName(Form("RandomTrigger%s%s",detector.Data(),kName.Data()));
853 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
856 ana->SetInputAODName(Form("RandomTrigger%s%s",detector.Data(),kName.Data()));
858 printf("Set RandomTrigger%s%s\n",detector.Data(),kName.Data());
860 //Set Histograms name tag, bins and ranges
862 ana->AddToHistogramsName(Form("AnaRandomTrigger%s_",detector.Data()));
864 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
868 ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
869 ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
872 if(kPrint) ana->Print("");
878 //__________________________________________________________________________________________
879 AliAnaInsideClusterInvariantMass* ConfigureInClusterIMAnalysis(Bool_t useSS = kTRUE, Bool_t useAsy = kFALSE)
881 AliAnaInsideClusterInvariantMass *ana = new AliAnaInsideClusterInvariantMass();
882 ana->SetDebug(kDebug); //10 for lots of messages
886 ana->SetMinEnergy(6);
887 ana->SetMaxEnergy(200.);
888 ana->SetMinNCells(6); // check same as in calopid
890 ana->SetCalorimeter(kCalorimeter);
891 ana->SwitchOnSplitClusterDistToBad();
893 ana->SwitchOffFillSSWeightHistograms() ;
894 ana->SetNWeightForShowerShape(0);
895 //ana->SetWeightForShowerShape(0, 4.6);
897 ana->SwitchOnFillNCellHistograms();
898 ana->SwitchOffFillEbinHistograms();
899 if(!useSS && !useAsy) ana->SwitchOnFillEbinHistograms();
903 ana->SwitchOnFillTMHistograms();
904 ana->SwitchOnFillTMResidualHistograms();
908 ana->SwitchOffFillTMHistograms();
909 ana->SwitchOffFillTMResidualHistograms();
912 //printf("Set correction slope for SS weight \n");
913 //ana->SetWCorrectionParameter(0.07);
914 //ana->SetNECellCutForShowerShape(0);
915 //ana->SetECellCutForShowerShape(0, 0.07);
916 //ana->SetECellCutForShowerShape(1, 0.1);
917 //ana->SetECellCutForShowerShape(2, 0.2);
921 ana->SwitchOnFillMCPrimaryHistograms() ;
922 ana->SwitchOffFillMCOverlapHistograms() ; // Off when possible
923 if(!useSS && !useAsy) ana->SwitchOnFillMCOverlapHistograms() ;
926 AliCaloPID* caloPID = ana->GetCaloPID();
927 caloPID->SetEMCALDEtaCut(0.025);
928 caloPID->SetEMCALDPhiCut(0.030);
929 caloPID->SetClusterSplittingM02Cut(0,100000); // use parametrized cut, not fixed
931 caloPID->SetPi0MassRange(0.11, 0.18);
932 caloPID->SetEtaMassRange(0.40, 0.60);
933 caloPID->SetPhotonMassRange(0.00, 0.08);
935 caloPID->SetSplitWidthSigma(3.); // cut at 3 sigma of the mean pi0 peak.
937 caloPID->SetClusterSplittingMinNCells(6);
939 if(kCollisions=="PbPb" || kName.Contains("150"))
941 caloPID->SetClusterSplittingMinNCells(4);
942 ana->SetMinNCells(4);
943 caloPID->SetPi0MassShiftHighECell(0.005);
944 if(kCollisions=="PbPb") ana->SwitchOnFillHighMultHistograms();
947 ana->AddToHistogramsName("AnaInClusterIM_");
951 caloPID->SwitchOnSplitAsymmetryCut() ;
955 printf("InClusterIM: Do not apply Asy cut on merged pi0 in cluster analysis \n");
956 caloPID->SwitchOffSplitAsymmetryCut() ;
957 ana->AddToHistogramsName("AnaInClusterIM_OpenAsy_");
962 printf("InClusterIM: Do not apply SS cut on merged pi0 in cluster analysis \n");
963 caloPID->SwitchOffSplitShowerShapeCut() ;
964 ana->AddToHistogramsName("AnaInClusterIM_OpenSS_");
966 else caloPID->SwitchOnSplitShowerShapeCut() ;
968 if(!useAsy && !useSS)
970 printf("InClusterIM: Do not apply SS and Asy cut on merged pi0 in cluster analysis \n");
971 ana->AddToHistogramsName("AnaInClusterIM_OpenSS_OpenAsy_");
974 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
978 if(kPrint) ana->Print("");
984 //_______________________________________________
985 AliAnaChargedParticles* ConfigureChargedAnalysis()
988 AliAnaChargedParticles *ana = new AliAnaChargedParticles();
989 ana->SetDebug(kDebug); //10 for lots of messages
994 ana->SwitchOnFiducialCut();
995 ana->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ; //more restrictive cut in reader and after in isolation
997 ana->SwitchOnFillVertexBC0Histograms() ;
998 if(!kSimulation) ana->SwitchOnFillPileUpHistograms();
1000 // Input / output delta AOD settings
1002 if(!kData.Contains("delta"))
1004 ana->SetOutputAODName(Form("Hadron%s",kName.Data()));
1005 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
1006 //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
1009 ana->SetInputAODName(Form("Hadron%s",kName.Data()));
1010 printf("Set Hadron%s\n",kName.Data());
1012 //Set Histograms name tag, bins and ranges
1014 ana->AddToHistogramsName("AnaHadrons_");
1015 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1017 ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
1018 ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
1022 if(kPrint) ana->Print("");
1029 //_____________________________________________________
1030 AliAnaPi0EbE* ConfigurePi0EbEAnalysis(TString particle,
1031 Int_t analysis, Bool_t useSS = kTRUE, Bool_t useAsy = kTRUE)
1034 AliAnaPi0EbE *ana = new AliAnaPi0EbE();
1035 ana->SetDebug(kDebug);//10 for lots of messages
1037 ana->SetAnalysisType(analysis);
1039 if(analysis == AliAnaPi0EbE::kIMCaloTracks) opt = "Conv";
1040 if(analysis == AliAnaPi0EbE::kSSCalo) opt = "SS";
1042 if(analysis == AliAnaPi0EbE::kIMCalo && kCalorimeter=="EMCAL" && !kSimulation) ana->SetPairTimeCut(100);
1043 if(analysis == AliAnaPi0EbE::kIMCaloTracks) ana->SetInputAODGammaConvName("PhotonsCTS");
1045 // Common settings for all 3 type of analysis
1047 ana->SwitchOnSelectedClusterHistoFill();
1049 ana->SetCalorimeter(kCalorimeter);
1051 //Set Histograms name tag, bins and ranges
1052 ana->AddToHistogramsName(Form("Ana%s%sEbE_TM%d_",particle.Data(),opt.Data(),kTM));
1054 // Specific settings for different type of analysis
1056 ana->SwitchOffFillWeightHistograms();
1057 if(!kSimulation) ana->SwitchOnFillPileUpHistograms();
1061 //printf("--->>>REMOVE MATCHED Pi0\n");
1062 ana->SwitchOnTrackMatchRejection() ;
1063 ana->SwitchOffTMHistoFill() ;
1067 //printf("---->>>ACCEPT MATCHED Pi0\n");
1068 ana->SwitchOffTrackMatchRejection() ;
1069 ana->SwitchOnTMHistoFill() ;
1072 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1074 //ana->SwitchOnFillEMCALBCHistograms();
1076 if(kPrint) ana->Print("");
1080 if(!kInputDataType.Contains("delta"))
1082 ana->SetOutputAODName(Form("%s%s%s",particle.Data(), opt.Data(), kName.Data()));
1083 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
1087 ana->SetInputAODName(Form("%s%s%s",particle.Data(),opt.Data(),kName.Data()));
1089 if(analysis!=AliAnaPi0EbE::kSSCalo)
1091 // Input / output delta AOD settings
1093 ana->SetInputAODName(Form("Photon%s",kName.Data()));
1095 AliNeutralMesonSelection *nms = ana->GetNeutralMesonSelection();
1096 nms->SetParticle(particle);
1098 // Tighten a bit mass cut with respect to default window
1099 if(particle=="Pi0") nms->SetInvMassCutRange(0.120,0.150);
1100 if(particle=="Eta") nms->SetInvMassCutRange(0.520,0.580);
1102 //if(!particle.Contains("SideBand")) nms->SwitchOnAngleSelection();
1103 //else nms->SwitchOnAngleSelection();
1105 nms->SwitchOffAngleSelection();
1106 if(particle.Contains("Pi0SideBand")) // For pi0, do not consider left band
1107 nms->SetSideBandCutRanges(-1,0,0.180,0.220);
1109 nms->KeepNeutralMesonSelectionHistos(kTRUE);
1110 //nms->SetAngleMaxParam(2,0.2);
1111 nms->SetHistoERangeAndNBins(0, 20, 80) ;
1112 //nms->SetHistoIMRangeAndNBins(0, 1, 400);
1115 { // cluster splitting settings
1116 ana->SetMinEnergy(6);
1117 ana->SetMaxEnergy(200.);
1119 ana->SetNLMMinEnergy(0, 10);
1120 ana->SetNLMMinEnergy(1, 6);
1121 ana->SetNLMMinEnergy(2, 6);
1123 ana->SetMinDistanceToBadChannel(2, 4, 6); // only use the first one
1124 ana->SwitchOnSplitClusterDistToBad();
1126 ana->SetTimeCut(-1e10,1e10); // Open time cut
1128 // NLM cut, used in all, exclude clusters with more than 2 maxima
1129 ana->SetNLMCut(1, 2) ;
1131 AliCaloPID* caloPID = ana->GetCaloPID();
1133 caloPID->SetSplitWidthSigma(3.); // cut at 3 sigma of the mean pi0 peak.
1137 printf("Do not apply SS cut on merged pi0 analysis \n");
1138 caloPID->SwitchOffSplitShowerShapeCut() ;
1139 ana->AddToHistogramsName(Form("Ana%s%sEbE_OpenSS_TM%d_",particle.Data(),opt.Data(),kTM));
1140 ana->SetOutputAODName(Form("%s%s%s_OpenSS",particle.Data(), opt.Data(), kName.Data()));
1141 caloPID->SetClusterSplittingM02Cut(0.1,10000);
1145 caloPID->SetClusterSplittingM02Cut(0.3,5); // Do the selection in the analysis class and not in the PID method to fill SS histograms
1146 caloPID->SwitchOnSplitShowerShapeCut() ;
1149 if(useAsy) caloPID->SwitchOnSplitAsymmetryCut() ;
1152 caloPID->SwitchOffSplitAsymmetryCut() ;
1155 ana->AddToHistogramsName(Form("Ana%s%sEbE_OpenSS_OpenAsy_TM%d_",particle.Data(),opt.Data(),kTM));
1156 ana->SetOutputAODName(Form("%s%s%s_OpenSS_OpenAsy",particle.Data(), opt.Data(), kName.Data()));
1160 ana->AddToHistogramsName(Form("Ana%s%sEbE_OpenAsy_TM%d_",particle.Data(),opt.Data(),kTM));
1161 ana->SetOutputAODName(Form("%s%s%s_OpenAsy",particle.Data(), opt.Data(), kName.Data()));
1165 //For Pi0 only if SwitchOnSimpleSplitMassCut()
1166 caloPID->SetPi0MassRange(0.10, 0.18);
1167 caloPID->SetEtaMassRange(0.40, 0.60);
1168 caloPID->SetPhotonMassRange(0.00, 0.08);
1170 caloPID->SetClusterSplittingMinNCells(6);
1172 //caloPID->SetSplitEnergyFractionMinimum(0, 0.95);
1173 //caloPID->SetSplitEnergyFractionMinimum(1, 0.95);
1174 //caloPID->SetSplitEnergyFractionMinimum(2, 0.8);
1176 if(kCollisions=="PbPb" || kName.Contains("150"))
1178 caloPID->SetClusterSplittingMinNCells(4);
1179 caloPID->SetPi0MassShiftHighECell(0.005);
1187 //____________________________________________________________________________________________________
1188 AliAnaParticleIsolation* ConfigureIsolationAnalysis(TString particle="Photon",
1189 Int_t partInCone = AliIsolationCut::kOnlyCharged,
1190 Int_t thresType = AliIsolationCut::kSumPtFracIC,
1193 Bool_t multi = kFALSE)
1196 AliAnaParticleIsolation *ana = new AliAnaParticleIsolation();
1197 //ana->SetDebug(kDebug);
1198 ana->SetDebug(kDebug);
1200 ana->SwitchOnFiducialCut();
1201 //Avoid borders of EMCal
1202 if(kCalorimeter=="EMCAL")
1203 ana->GetFiducialCut()->SetSimpleEMCALFiducialCut(0.6, 86, 174) ;
1205 // Same Eta as EMCal, cut in phi if EMCAL was triggering
1206 if(particle=="Hadron" || particle.Contains("CTS"))
1208 // if(kTrig.Contains("EMC"))
1209 // ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 260, 360) ;
1211 ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 0, 360) ;
1216 // Input / output delta AOD settings
1218 ana->SetInputAODName(Form("%s%s",particle.Data(),kName.Data()));
1219 ana->SetAODObjArrayName(Form("IC%s_%s",particle.Data(),kName.Data()));
1221 ana->SetCalorimeter(kCalorimeter);
1223 if(!kTM) ana->SwitchOnTMHistoFill();
1224 else ana->SwitchOffTMHistoFill();
1226 ana->SwitchOffSSHistoFill();
1227 if(!kSimulation) ana->SwitchOnFillPileUpHistograms();
1229 //Do settings for main isolation cut class
1230 AliIsolationCut * ic = ana->GetIsolationCut();
1231 ic->SetDebug(kDebug);
1233 if(cone >0 && pth > 0)
1235 ic->SetPtThreshold(pth);
1236 ic->SetConeSize(cone);
1240 if(kCollisions=="pp")
1242 ic->SetPtThreshold(0.5);
1243 ic->SetConeSize(0.4);
1245 if(kCollisions=="PbPb")
1247 ic->SetPtThreshold(3.);
1248 //ic->SetPtThreshold(1.);
1249 ic->SetConeSize(0.3);
1253 ic->SetPtFraction(0.1);
1254 ic->SetSumPtThreshold(1.0) ;
1255 ic->SetParticleTypeInCone(partInCone);
1256 ic->SetICMethod(thresType);
1258 //Do or not do isolation with previously produced AODs.
1259 //No effect if use of SwitchOnSeveralIsolation()
1260 ana->SwitchOffReIsolation();
1265 ic->SetConeSize(1.); // Take all for first iteration
1266 ic->SetPtThreshold(100);// Take all for first iteration
1267 ana->SwitchOnSeveralIsolation() ;
1268 ana->SetAODObjArrayName(Form("MultiIC%sTM%d",particle.Data(),kTM));
1271 ana->SetNPtThresFrac(4);
1272 ana->SetConeSizes(0,0.3); ana->SetConeSizes(1,0.4);
1273 ana->SetConeSizes(2,0.5); ana->SetConeSizes(3,0.6);
1274 ana->SetPtThresholds(0, 0.5); ana->SetPtThresholds(1, 1); ana->SetPtThresholds(2, 2);
1275 ana->SetPtFractions (0, 0.05) ; ana->SetPtFractions (1, 0.1); ana->SetPtFractions (2, 0.2) ; ana->SetPtFractions (3, 0.3) ;
1276 ana->SetSumPtThresholds(0, 1) ; ana->SetSumPtThresholds(1, 3) ; ana->SetSumPtThresholds(2, 5); ana->SetSumPtThresholds(3, 7) ;
1278 ana->SwitchOffTMHistoFill();
1279 ana->SwitchOffSSHistoFill();
1282 ana->SwitchOffSeveralIsolation() ;
1284 AliCaloPID* caloPID = ana->GetCaloPID();
1285 caloPID->SetEMCALDEtaCut(0.025);
1286 caloPID->SetEMCALDPhiCut(0.030);
1288 //Set Histograms name tag, bins and ranges
1290 if(!multi)ana->AddToHistogramsName(Form("AnaIsol%s_TM%d_",particle.Data(),kTM));
1291 else ana->AddToHistogramsName(Form("AnaMultiIsol%s_TM%d_",particle.Data(),kTM));
1293 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1295 if(particle=="Hadron" || particle.Contains("CTS"))
1297 ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
1298 ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
1301 ana->SwitchOnRealCaloAcceptance(); // primary particle acceptance histograms
1304 if(kPrint) ic ->Print("");
1305 if(kPrint) ana->Print("");
1311 //___________________________________________________________________________________
1312 AliAnaParticleHadronCorrelation* ConfigureHadronCorrelationAnalysis(TString particle,
1314 Int_t partInCone = AliIsolationCut::kOnlyCharged,
1315 Int_t thresType = AliIsolationCut::kSumPtFracIC,
1320 AliAnaParticleHadronCorrelation *ana = new AliAnaParticleHadronCorrelation();
1321 ana->SetDebug(kDebug);
1323 ana->SwitchOnAbsoluteLeading(); // Select trigger leading particle of all the selected tracks
1324 ana->SwitchOffNearSideLeading(); // Select trigger leading particle of all the particles at +-90 degrees, default
1326 //ana->SwitchOnLeadHadronSelection();
1327 //ana->SetLeadHadronPhiCut(TMath::DegToRad()*100., TMath::DegToRad()*260.);
1328 //ana->SetLeadHadronPtCut(0.5, 100);
1330 ana->SetTriggerPtRange(5,100);
1331 ana->SetAssociatedPtRange(0.2,100);
1332 //ana->SetDeltaPhiCutRange( TMath::Pi()/2,3*TMath::Pi()/2 ); //[90 deg, 270 deg]
1333 ana->SetDeltaPhiCutRange (TMath::DegToRad()*120.,TMath::DegToRad()*240.);
1334 ana->SetUeDeltaPhiCutRange(TMath::DegToRad()*60. ,TMath::DegToRad()*120.);
1335 ana->SwitchOnFillEtaGapHistograms();
1337 ana->SetNAssocPtBins(9);
1338 ana->SetAssocPtBinLimit(0, 0.2) ;
1339 ana->SetAssocPtBinLimit(1, 0.5) ;
1340 ana->SetAssocPtBinLimit(2, 1) ;
1341 ana->SetAssocPtBinLimit(3, 2) ;
1342 ana->SetAssocPtBinLimit(4, 3) ;
1343 ana->SetAssocPtBinLimit(5, 4) ;
1344 ana->SetAssocPtBinLimit(6, 6) ;
1345 ana->SetAssocPtBinLimit(7, 10) ;
1346 ana->SetAssocPtBinLimit(8, 30) ;
1347 ana->SetAssocPtBinLimit(9, 200) ;
1348 //ana->SwitchOnFillPtImbalancePerPtABinHistograms();
1350 ana->SelectIsolated(bIsolated); // do correlation with isolated photons
1354 //Do settings for main isolation cut class
1355 AliIsolationCut * ic = ana->GetIsolationCut();
1356 ic->SetDebug(kDebug);
1358 if(cone >0 && pth > 0)
1360 ic->SetPtThreshold(pth);
1361 ic->SetConeSize(cone);
1365 if(kCollisions=="pp")
1367 ic->SetPtThreshold(0.5);
1368 ic->SetConeSize(0.4);
1370 if(kCollisions=="PbPb")
1372 ic->SetPtThreshold(3.);
1373 //ic->SetPtThreshold(1.);
1374 ic->SetConeSize(0.3);
1378 ic->SetPtFraction(0.1);
1379 ic->SetSumPtThreshold(1.0) ;
1380 ic->SetParticleTypeInCone(partInCone);
1381 ic->SetICMethod(thresType);
1385 // Mixing with own pool
1388 ana->SwitchOnOwnMix();
1389 ana->SwitchOnFillNeutralInMixedEvent();
1392 ana->SwitchOffOwnMix();
1394 ana->SetNZvertBin(20);
1395 ana->SwitchOffCorrelationVzBin() ;
1396 ana->SwitchOffFillHighMultiplicityHistograms();
1398 if(kCollisions=="pp")
1400 ana->SetNMaxEvMix(100);
1401 ana->SwitchOnTrackMultBins();
1402 ana->SetNTrackMultBin(10); // same as SetNCentrBin(10);
1407 ana->SetNMaxEvMix(10);
1408 ana->SwitchOffTrackMultBins(); // centrality bins
1409 ana->SetNCentrBin(3);
1411 if(kName.Contains("60_90"))
1413 printf("*** Set mixing for peripheral\n");
1414 ana->SetNMaxEvMix(50);
1415 ana->SetNCentrBin(2);
1419 ana->SwitchOnFiducialCut();
1421 //Avoid borders of EMCal, same as for isolation
1422 if(kCalorimeter=="EMCAL")
1423 ana->GetFiducialCut()->SetSimpleEMCALFiducialCut(0.6, 86, 174) ;
1425 // Same Eta as EMCal, cut in phi if EMCAL was triggering
1426 if(particle=="Hadron" || particle.Contains("CTS"))
1428 //if(kTrig.Contains("EMC"))
1429 // ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 260, 360) ;
1431 ana->GetFiducialCut()->SetSimpleCTSFiducialCut (0.6, 0, 360) ;
1434 // Input / output delta AOD settings
1436 ana->SetInputAODName(Form("%s%s",particle.Data(),kName.Data()));
1437 ana->SetAODObjArrayName(Form("%sHadronCorrIso%d_%s",particle.Data(),bIsolated,kName.Data()));
1439 // Fill extra plots on tagged decay photons
1440 // If trigger is pi0/eta found with invariant mass, get the decays
1441 // If trigger is photon, check if it was tagged as decay previously
1442 if(particle!="Hadron" )
1444 if(particle.Contains("Pi0") || particle.Contains("Eta"))
1446 ana->SwitchOffPi0TriggerDecayCorr();
1447 ana->SwitchOffDecayTriggerDecayCorr();
1451 ana->SwitchOffPi0TriggerDecayCorr();
1452 ana->SwitchOnDecayTriggerDecayCorr(); // Make sure pi0 decay tagging runs before this task
1457 ana->SwitchOffPi0TriggerDecayCorr();
1458 ana->SwitchOffDecayTriggerDecayCorr();
1461 if(particle=="Photon")
1463 printf("**** SET M02 limits *** \n");
1464 ana->SetM02Cut(0.1,0.27);
1467 // if triggering on PHOS and EMCAL is on
1468 //if(kCalorimeter=="PHOS") ana->SwitchOnNeutralCorr();
1469 ana->SwitchOffNeutralCorr(); // Do only correlation with TPC
1471 ana->SwitchOffHMPIDCorrelation();
1473 ana->SwitchOffFillBradHistograms();
1476 ana->SwitchOnSeveralUECalculation();
1477 ana->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
1479 //Set Histograms name tag, bins and ranges
1481 ana->AddToHistogramsName(Form("Ana%sHadronCorr_Iso%d_TM%d_",particle.Data(),bIsolated,kTM));
1482 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1484 if(particle=="Hadron" || particle.Contains("CTS"))
1486 ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
1487 ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
1492 if(kPrint) ana->Print("");
1498 //________________________________________
1499 AliAnaCalorimeterQA* ConfigureQAAnalysis()
1502 AliAnaCalorimeterQA *ana = new AliAnaCalorimeterQA();
1503 ana->SetDebug(kDebug); //10 for lots of messages
1504 ana->SetCalorimeter(kCalorimeter);
1506 ana->SetTimeCut(-1e10,1e10); // Open time cut
1508 // Study inter detector correlation (PHOS, EMCAL, Tracks, V0)
1509 if(kCalorimeter=="PHOS" && kTrig=="PHOS")
1510 ana->SwitchOnCorrelation(); // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
1511 if(kCalorimeter=="EMCAL" && kClusterArray=="")
1512 ana->SwitchOnCorrelation(); // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
1514 ana->SwitchOffCorrelation();
1516 // Study exotic clusters PHOS and EMCAL
1517 if(kClusterArray=="") ana->SwitchOnStudyBadClusters() ;
1518 else ana->SwitchOffStudyBadClusters() ;
1521 ana->SwitchOffFiducialCut();
1522 ana->SwitchOffFillAllTH3Histogram();
1523 ana->SwitchOffFillAllPositionHistogram();
1524 ana->SwitchOffFillAllPositionHistogram2();
1525 if(!kExotic)ana->SwitchOnStudyBadClusters();
1526 else ana->SwitchOffStudyBadClusters();
1527 ana->SwitchOffStudyClustersAsymmetry();
1528 ana->SwitchOffStudyWeight();
1529 ana->SwitchOnFillAllTrackMatchingHistogram();
1530 ana->SwitchOnFillAllCellTimeHisto() ;
1532 ana->AddToHistogramsName("QA_"); //Begining of histograms name
1533 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1537 if(kPrint) ana->Print("");
1543 //________________________________________________________________
1544 AliAnaGeneratorKine* ConfigureGenKineAnalysis()
1546 // Analysis for parton, jets correlation with photon and pi0
1548 AliAnaGeneratorKine *ana = new AliAnaGeneratorKine();
1549 ana->SetDebug(kDebug); //10 for lots of messages
1551 // Trigger detector, acceptance and pT cut
1552 ana->SetTriggerDetector("EMCAL");
1553 ana->SetMinPt(10); // Trigger photon, pi0 minimum pT
1554 ana->GetFiducialCutForTrigger()->SetSimpleEMCALFiducialCut(0.6, 85, 175);
1556 // Particles associated to trigger or isolation cone acceptance and pT cut
1557 ana->SetCalorimeter("EMCAL");
1558 ana->SetMinChargedPt(0.2);
1559 ana->SetMinNeutralPt(0.3);
1560 ana->GetFiducialCut()->SetSimpleEMCALFiducialCut(0.65, 81, 179);
1561 ana->GetFiducialCut()->SetSimpleCTSFiducialCut(0.9, 0, 360);
1563 // Isolation paramters
1564 AliIsolationCut * ic = ana->GetIsolationCut();
1565 ic->SetDebug(kDebug);
1566 ic->SetPtThreshold(0.5);
1567 ic->SetConeSize(0.5);
1568 ic->SetSumPtThreshold(1.0) ;
1569 ic->SetICMethod(AliIsolationCut::kPtThresIC); // kSumPtIC
1571 ana->AddToHistogramsName("AnaGenKine_");
1572 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
1574 if(kPrint) ana->Print("");
1580 //________________________________________________________
1581 void ConfigureMC(AliAnaCaloTrackCorrBaseClass* ana)
1583 if(kSimulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
1584 else ana->SwitchOffDataMC() ;
1586 //Set here generator name, default pythia
1587 //ana->GetMCAnalysisUtils()->SetMCGenerator("");
1590 //________________________________________________________
1591 void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges)
1593 // Set common bins for all analysis and MC histograms filling
1595 histoRanges->SetHistoPtRangeAndNBins(0, 100, 200) ; // Energy and pt histograms
1597 if(kCalorimeter=="EMCAL")
1601 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 122*TMath::DegToRad(), 78) ;
1602 histoRanges->SetHistoXRangeAndNBins(-230,90,120); // QA
1603 histoRanges->SetHistoYRangeAndNBins(370,450,40); // QA
1605 else if(kYears==2011)
1607 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
1608 histoRanges->SetHistoXRangeAndNBins(-600,90,200); // QA
1609 histoRanges->SetHistoYRangeAndNBins(100,450,100); // QA
1613 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 190*TMath::DegToRad(), 122) ;
1614 histoRanges->SetHistoXRangeAndNBins(-100,90,200); // QA
1615 histoRanges->SetHistoYRangeAndNBins(50,450,100); // QA
1618 histoRanges->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
1622 histoRanges->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
1623 histoRanges->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
1626 histoRanges->SetHistoShowerShapeRangeAndNBins(-0.1, 4.9, 500);
1628 // Invariant mass histoRangeslysis
1629 histoRanges->SetHistoMassRangeAndNBins(0., 1., 200) ;
1630 histoRanges->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
1632 // check if time calibration is on
1633 histoRanges->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
1634 histoRanges->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
1636 // track-cluster residuals
1637 histoRanges->SetHistoTrackResidualEtaRangeAndNBins(-0.15,0.15,300);
1638 histoRanges->SetHistoTrackResidualPhiRangeAndNBins(-0.15,0.15,300);
1639 histoRanges->SetHistodRRangeAndNBins(0.,0.15,150);//QA
1641 // QA, electron, charged
1642 histoRanges->SetHistoPOverERangeAndNBins(0,2.,200);
1643 histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
1646 histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
1647 histoRanges->SetHistoVertexDistRangeAndNBins(0.,500.,500);
1648 histoRanges->SetHistoZRangeAndNBins(-400,400,200);
1649 histoRanges->SetHistoRRangeAndNBins(400,450,25);
1650 histoRanges->SetHistoV0SignalRangeAndNBins(0,5000,500);
1651 histoRanges->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
1654 if(kCollisions=="PbPb")
1656 histoRanges->SetHistoNClusterCellRangeAndNBins(0,100,100);
1657 histoRanges->SetHistoNClustersRangeAndNBins(0,500,50);
1658 histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,2000,200);
1662 histoRanges->SetHistoNClusterCellRangeAndNBins(0,50,50);
1663 histoRanges->SetHistoNClustersRangeAndNBins(0,50,50);
1664 histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,200,200);
1668 histoRanges->SetHistoRatioRangeAndNBins(0.,2.,200);
1669 histoRanges->SetHistoHBPRangeAndNBins (0.,10.,200);
1672 histoRanges->SetHistoPtInConeRangeAndNBins(0, 50 , 250);
1673 histoRanges->SetHistoPtSumRangeAndNBins (0, 100, 250);
1677 //_____________________________
1678 UInt_t SetTriggerMaskFromName()
1682 printf("CaloTrackCorr trigger EMC7\n");
1683 return AliVEvent::kEMC7;
1685 else if (kTrig=="INT7")
1687 printf("CaloTrackCorr trigger INT7\n");
1688 return AliVEvent::kINT7;
1690 else if(kTrig=="EMC1")
1692 printf("CaloTrackCorr trigger EMC1\n");
1693 return AliVEvent::kEMC1;
1695 else if(kTrig=="MB")
1697 printf("CaloTrackCorr trigger MB\n");
1698 return AliVEvent::kMB;
1700 else if(kTrig=="PHOS")
1702 printf("CaloTrackCorr trigger PHOS\n");
1703 return AliVEvent::kPHI7;
1705 else if(kTrig=="PHOSPb")
1707 printf("CaloTrackCorr trigger PHOSPb\n");
1708 return AliVEvent::kPHOSPb;
1710 else if(kTrig=="AnyINT")
1712 printf("CaloTrackCorr trigger AnyINT\n");
1713 return AliVEvent::kAnyINT;
1715 else if(kTrig=="INT")
1717 printf("CaloTrackCorr trigger AnyINT\n");
1718 return AliVEvent::kAny;
1720 else if(kTrig=="EMCEGA")
1722 printf("CaloTrackCorr trigger EMC Gamma\n");
1723 return AliVEvent::kEMCEGA;
1725 else if(kTrig=="EMCEJE")
1727 printf("CaloTrackCorr trigger EMC Jet\n");
1728 return AliVEvent::kEMCEJE;
1730 else if(kTrig=="Central")
1732 printf("CaloTrackCorr trigger Central\n");
1733 return (AliVEvent::kCentral | AliVEvent::kMB);
1735 else if(kTrig=="CentralEGA")
1737 printf("CaloTrackCorr trigger Central+EMCEGA\n");
1738 return (AliVEvent::kCentral | AliVEvent::kEMCEGA);
1740 else if(kTrig=="SemiCentral")
1742 printf("CaloTrackCorr trigger SemiCentral\n");
1743 return (AliVEvent::kSemiCentral | AliVEvent::kMB);
1745 else if(kTrig=="SemiOrCentral")
1747 printf("CaloTrackCorr trigger SemiCentral Or Central\n");
1748 return (AliVEvent::kSemiCentral | AliVEvent::kCentral | AliVEvent::kMB);