]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/CaloTrackCorrelations/macros/AddTaskShowerShapeStudies.C
remove right UE histograms, duplication of default UE histograms; do the 2pi shift...
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / macros / AddTaskShowerShapeStudies.C
CommitLineData
bef94c35 1
2Bool_t kPrint = kFALSE;
3Bool_t kSimulation = kFALSE;
4Bool_t kUseKinematics = kFALSE;
5Bool_t kOutputAOD = kFALSE;
6Bool_t kEventSelection= kFALSE;
7Bool_t kExotic = kTRUE;
8Bool_t kNonLinearity = kFALSE;
9Int_t kYears = 2011;
10TString kCollisions = "pp";
11TString kTrig = "EMC7" ;
12TString kClusterArray = "";
13TString kData = "ESD";
14TString kInputDataType = "ESD";
15TString kCalorimeter = "EMCAL";
16Bool_t kTM = kTRUE;
17Bool_t kRecalTM = kTRUE;
18Int_t kMinCen = -1;
19Int_t kMaxCen = -1;
20TString kName = "";
21Int_t kDebug = -1;
22Bool_t kQA = kFALSE;
bef94c35 23Bool_t kCalibE = kTRUE;
24Bool_t kCalibT = kTRUE;
25Bool_t kBadMap = kTRUE;
26
27AliAnalysisTaskCaloTrackCorrelation *AddTaskShowerShapeStudies(const TString data = "AOD",
28 const TString calorimeter = "EMCAL",
29 const Bool_t simulation = kFALSE,
30 const Bool_t eventsel = kFALSE,
31 const Bool_t exotic = kTRUE,
32 const Bool_t nonlin = kFALSE,
33 TString outputfile = "",
d2655d46 34 const Int_t year = 2011,
bef94c35 35 const TString col = "pp",
36 const TString trigger = "MB",
37 const TString clustersArray = "V1",
38 const Bool_t recaltm = kTRUE,
39 const Bool_t tm = kTRUE,
40 const Int_t minCen = -1,
41 const Int_t maxCen = -1,
42 const Bool_t qaan = kFALSE,
bef94c35 43 const Bool_t calibE = kTRUE,
44 const Bool_t badmap = kTRUE,
45 const Bool_t calibT = kTRUE,
46 const Bool_t outputAOD = kFALSE,
47 const Bool_t printSettings = kFALSE
48 )
49{
50 // Creates a CaloTrackCorr task, configures it and adds it to the analysis manager.
51
52 kPrint = printSettings;
53 kSimulation = simulation;
54 kYears = year;
55 kCollisions = col;
56 kExotic = exotic;
57 kNonLinearity = nonlin;
58 kTrig = trigger;
59 kClusterArray = clustersArray;
60 kData = data;
61 kCalorimeter = calorimeter;
62 kOutputAOD = outputAOD;
63 kTM = tm;
64 kRecalTM = recaltm;
65 kMinCen = minCen;
66 kMaxCen = maxCen;
67 kEventSelection= eventsel;
68 kQA = qaan;
bef94c35 69 kCalibE = calibE;
70 kCalibT = calibT;
71 kBadMap = badmap;
72
73 // Get the pointer to the existing analysis manager via the static access method.
74
75 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
76 if (!mgr)
77 {
78 ::Error("AddTask", "No analysis manager to connect to.");
79 return NULL;
80 }
81
82 // Check the analysis type using the event handlers connected to the analysis manager.
83
84 if (!mgr->GetInputEventHandler())
85 {
86 ::Error("AddTask", "This task requires an input event handler");
87 return NULL;
88 }
89
90 kInputDataType = "AOD";
91 if(!kData.Contains("delta"))
92 kInputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
93
94 if(kSimulation)
95 {
96 kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
97 if (!kUseKinematics && data=="AOD" && kInputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ...
98 }
99
100 cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
101
102 // Name for containers
103
104 kName = Form("%s_Trig%s_Cl%s_TM%d",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kTM);
105
106 if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);
107
108 printf("<<<< NAME: %s >>>>>\n",kName.Data());
109
110 // #### Configure analysis ####
111
112 AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
113
114 // General frame setting and configuration
115 maker->SetReader (ConfigureReader() );
116 maker->SetCaloUtils(ConfigureCaloUtils());
117
118 // Analysis tasks setting and configuration
d2655d46 119 Int_t n = 0;//Analysis number, order is important
bef94c35 120
d2655d46 121 maker->AddAnalysis(ConfigurePhotonAnalysis(), n++); // Photon cluster selection
bef94c35 122 maker->AddAnalysis(ConfigureElectronAnalysis(),n++); // Electron cluster selection
123 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kIMCalo), n++); // Pi0 event by event selection, and photon tagging from decay
124 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Eta", AliAnaPi0EbE::kIMCalo), n++); // Eta event by event selection, and photon tagging from decay
bef94c35 125
d2655d46 126 if(kCalorimeter=="EMCAL")
127 {
128 maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kSSCalo), n++); // Pi0 event by event selection, and photon tagging from decay
129 maker->AddAnalysis(ConfigureInClusterIMAnalysis(0.5,100), n++);
130 }
bef94c35 131
d2655d46 132 if(kQA) maker->AddAnalysis(ConfigureQAAnalysis(),n++);
bef94c35 133
134 maker->SetAnaDebug(kDebug) ;
135 maker->SwitchOnHistogramsMaker() ;
136 if(kData.Contains("delta")) maker->SwitchOffAODsMaker() ;
137 else maker->SwitchOnAODsMaker() ;
138
139 if(kPrint) maker->Print("");
140
141 printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, kCalorimeter.Data());
142 // CAREFUL
143 //kName = Form("%s_Trig%s_Cl%s_TM%d",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kFALSE);
144 kName = Form("%s_Trig%s_Cl%s",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data());
145 if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);
146
147 // Create task
148
149 AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("CaloTrackCorr%s",kName.Data()));
150 task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
151 task->SetDebugLevel(kDebug);
152 task->SetBranches("ESD:AliESDRun.,AliESDHeader");
153 task->SetAnalysisMaker(maker);
154 mgr->AddTask(task);
155
156 //Create containers
157
158 if(outputfile.Length()==0) outputfile = AliAnalysisManager::GetCommonFileName();
159
160 AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(kName, TList::Class(),
161 AliAnalysisManager::kOutputContainer,
162 Form("%s",outputfile.Data()));
163
164 AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("Cuts_%s",kName.Data()), TList::Class(),
165 AliAnalysisManager::kParamContainer,
166 Form("%s",outputfile.Data()));
167
168 // Create ONLY the output containers for the data produced by the task.
169 // Get and connect other common input/output containers via the manager as below
170 //==============================================================================
171 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
172 // AOD output slot will be used in a different way in future
173 if(!kData.Contains("delta") && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
174 mgr->ConnectOutput (task, 1, cout_pc);
175 mgr->ConnectOutput (task, 2, cout_cuts);
176
177
d2655d46 178 if(kTrig=="EMC7")
179 {
bef94c35 180 printf("CaloTrackCorr trigger EMC7\n");
181 task->SelectCollisionCandidates(AliVEvent::kEMC7);
182 }
d2655d46 183 else if (kTrig=="INT7")
184 {
bef94c35 185 printf("CaloTrackCorr trigger INT7\n");
186 task->SelectCollisionCandidates(AliVEvent::kINT7);
187 }
d2655d46 188 else if(kTrig=="EMC1")
189 {
bef94c35 190 printf("CaloTrackCorr trigger EMC1\n");
191 task->SelectCollisionCandidates(AliVEvent::kEMC1);
192 }
d2655d46 193 else if(kTrig=="MB")
194 {
bef94c35 195 printf("CaloTrackCorr trigger MB\n");
196 task->SelectCollisionCandidates(AliVEvent::kMB);
197 }
d2655d46 198 else if(kTrig=="PHOS")
199 {
bef94c35 200 printf("CaloTrackCorr trigger PHOS\n");
201 task->SelectCollisionCandidates(AliVEvent::kPHI7);
202 }
d2655d46 203 else if(kTrig=="PHOSPb")
204 {
bef94c35 205 printf("CaloTrackCorr trigger PHOSPb\n");
206 task->SelectCollisionCandidates(AliVEvent::kPHOSPb);
207 }
208 else if(kTrig=="AnyINT")
209 {
210 printf("CaloTrackCorr trigger AnyINT\n");
211 task->SelectCollisionCandidates(AliVEvent::kAnyINT);
212 }
213 else if(kTrig=="INT")
214 {
215 printf("CaloTrackCorr trigger AnyINT\n");
216 task->SelectCollisionCandidates(AliVEvent::kAny);
217 }
218 else if(kTrig=="EMCEGA")
219 {
220 printf("CaloTrackCorr trigger EMC Gamma\n");
221 task->SelectCollisionCandidates(AliVEvent::kEMCEGA);
222 }
223 else if(kTrig=="EMCEJE")
224 {
225 printf("CaloTrackCorr trigger EMC Jet\n");
226 task->SelectCollisionCandidates(AliVEvent::kEMCEJE);
227 }
228 else if(kTrig=="Central")
229 {
230 printf("CaloTrackCorr trigger Central\n");
231 task->SelectCollisionCandidates(AliVEvent::kCentral);
232 }
233 else if(kTrig=="SemiCentral")
234 {
235 printf("CaloTrackCorr trigger SemiCentral\n");
236 task->SelectCollisionCandidates(AliVEvent::kSemiCentral);
237 }
238
239 return task;
240}
241
242//____________________________________
243AliCaloTrackReader * ConfigureReader()
244{
245
246 AliCaloTrackReader * reader = 0;
247 if (kData.Contains("AOD")) reader = new AliCaloTrackAODReader();
248 else if(kData=="ESD") reader = new AliCaloTrackESDReader();
249 else if(kData=="MC" &&
250 kInputDataType == "ESD") reader = new AliCaloTrackMCReader();
251
252 reader->SetDebug(kDebug);//10 for lots of messages
253
254 //Delta AOD?
255 //reader->SetDeltaAODFileName("");
256 if(kOutputAOD) reader->SwitchOnWriteDeltaAOD() ;
257
258 // MC settings
259 if(kUseKinematics){
260 if(kInputDataType == "ESD"){
261 reader->SwitchOnStack();
262 reader->SwitchOffAODMCParticles();
263 }
264 else if(kInputDataType == "AOD"){
265 reader->SwitchOffStack();
266 reader->SwitchOnAODMCParticles();
267 }
268 }
269
270 //------------------------
271 // Detector input filling
272 //------------------------
273
274 //Min cluster/track E
d2655d46 275 reader->SetEMCALEMin(0.3);
bef94c35 276 reader->SetEMCALEMax(1000);
277 reader->SetPHOSEMin(0.3);
278 reader->SetPHOSEMax(1000);
279 reader->SetCTSPtMin(0.1);
280 reader->SetCTSPtMax(1000);
281
d2655d46 282 if(!kSimulation && kCalibT) reader->SetEMCALTimeCut(-30,30);
283 else reader->SetEMCALTimeCut(-1000,1000); // Open time cut
284
bef94c35 285 reader->SwitchOnFiducialCut();
286 reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;
287
d2655d46 288 // Tracks (do not filter tracks for SS studies)
289 reader->SwitchOffCTS();
290
bef94c35 291 if(kInputDataType=="ESD")
292 {
293 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
294 AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10041004);
295 reader->SetTrackCuts(esdTrackCuts);
296 }
297 else if(kInputDataType=="AOD")
298 {
299 reader->SetTrackFilterMask(128); // Filter bit, not mask
300 }
301
302 // Calorimeter
303
304 reader->SetEMCALClusterListName(kClusterArray);
305 if(kClusterArray == "")
306 {
307 printf("**************** Standard EMCAL clusters branch analysis **************** \n");
308 reader->SwitchOnClusterRecalculation();
309 // Check in ConfigureCaloUtils that the recalibration and bad map are ON
310 }
311 else
312 {
313 printf("**************** Input for analysis is Clusterizer %s **************** \n", kClusterArray.Data());
314 reader->SwitchOffClusterRecalculation();
315 }
316
d2655d46 317 if(kCalorimeter == "EMCAL")
318 {
bef94c35 319 reader->SwitchOnEMCALCells();
320 reader->SwitchOnEMCAL();
d2655d46 321 }
322 if(kCalorimeter == "PHOS")
323 {
bef94c35 324 reader->SwitchOnPHOSCells();
325 reader->SwitchOnPHOS();
d2655d46 326 }
bef94c35 327
328 // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
d2655d46 329 if(kData.Contains("delta"))
330 {
bef94c35 331 reader->SwitchOffEMCAL();
332 reader->SwitchOffPHOS();
333 reader->SwitchOffEMCALCells();
334 reader->SwitchOffPHOSCells();
335 }
336
337 //-----------------
338 // Event selection
339 //-----------------
340
341 //if(!kUseKinematics) reader->SetFiredTriggerClassName("CEMC7EGA-B-NOPF-CENTNOTRD"); // L1 Gamma
342
d2655d46 343 reader->SetZvertexCut(10.);
bef94c35 344
345 if(kEventSelection)
346 {
333b77db 347 reader->SwitchOnPileUpEventRejection(); // remove pileup by default
bef94c35 348 reader->SwitchOnV0ANDSelection() ; // and besides v0 AND
349 reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex
350 }
351 else
352 {
333b77db 353 reader->SwitchOffPileUpRejection(); // remove pileup by default
bef94c35 354 reader->SwitchOffV0ANDSelection() ; // and besides v0 AND
355 reader->SwitchOffPrimaryVertexSelection(); // and besides primary vertex
356 }
357
358 if(kCollisions=="PbPb")
359 {
360 // Centrality
361 reader->SetCentralityClass("V0M");
362 reader->SetCentralityOpt(10); // 10 (c= 0-10, 10-20 ...), 20 (c= 0-5, 5-10 ...) or 100 (c= 1, 2, 3 ..)
363 reader->SetCentralityBin(kMinCen,kMaxCen); // Accept all events, if not select range
364
365 // Event plane (only used in AliAnaPi0 for the moment)
366 reader->SetEventPlaneMethod("Q");
367 }
d2bd7f0c 368
bef94c35 369 if(kPrint) reader->Print("");
370
371 return reader;
372
373}
374
375//_______________________________________
376AliCalorimeterUtils* ConfigureCaloUtils()
377{
378
379 AliCalorimeterUtils *cu = new AliCalorimeterUtils;
380 cu->SetDebug(kDebug);
381
382 // Remove clusters close to borders, at least max energy cell is 1 cell away
383 cu->SetNumberOfCellsFromEMCALBorder(1);
384 cu->SetNumberOfCellsFromPHOSBorder(2);
385
386 // Search of local maxima in cluster
387 if(kCollisions=="pp")
388 {
389 cu->SetLocalMaximaCutE(0.1);
390 cu->SetLocalMaximaCutEDiff(0.03);
391 }
392 else
393 {
394 cu->SetLocalMaximaCutE(0.2);
395 cu->SetLocalMaximaCutEDiff(0.03);
396 }
397
398 cu->SwitchOffClusterPlot();
399
400 if(kRecalTM) cu->SwitchOnRecalculateClusterTrackMatching(); // Done in clusterization
401 else cu->SwitchOffRecalculateClusterTrackMatching();
402
403 cu->SwitchOnBadChannelsRemoval() ;
404
405 //EMCAL settings
406
407 if(!kSimulation)
408 cu->SwitchOnLoadOwnEMCALGeometryMatrices();
409
410 AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
411
412
413 cu->SwitchOnRecalibration(); // Check the reader if it is taken into account during filtering
414
415
416 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C");
417 ConfigureEMCALRecoUtils(recou,
418 kSimulation,
419 kExotic,
420 kNonLinearity,
421 kCalibE,
422 kBadMap,
423 kCalibT);
424
425 if( kNonLinearity )
426 {
427 printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
428 cu->SwitchOnCorrectClusterLinearity();
429 }
430
431 printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
432 printf("ConfigureCaloUtils() - EMCAL BadMap ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
433
4afd944b 434
435 if(kCalorimeter=="PHOS")
436 {
437 if (kYears < 2014) cu->SetNumberOfSuperModulesUsed(3);
438 else cu->SetNumberOfSuperModulesUsed(4);
439 }
440 else
441 {
442 if (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
443 else if (kYears < 2014) cu->SetNumberOfSuperModulesUsed(10);
444 else cu->SetNumberOfSuperModulesUsed(20);
445 }
446
bef94c35 447 // PHOS
448 cu->SwitchOffLoadOwnPHOSGeometryMatrices();
449
450 if(kPrint) cu->Print("");
451
452 return cu;
453
454}
455
456//_____________________________________
457AliAnaPhoton* ConfigurePhotonAnalysis()
458{
459
460 AliAnaPhoton *ana = new AliAnaPhoton();
461 ana->SetDebug(kDebug); //10 for lots of messages
462
463 // cluster selection cuts
464
465 ana->SwitchOffFiducialCut();
466
467 ana->SetCalorimeter(kCalorimeter);
468
469 if(kCalorimeter == "PHOS")
470 {
471 ana->SetNCellCut(2);// At least 3 cells
472 ana->SetMinPt(0.3);
473 ana->SetMinDistanceToBadChannel(2, 4, 5);
474 ana->SetTimeCut(-2000,2000); // open cut
475 }
476 else
477 {//EMCAL
478 ana->SetNCellCut(1);// At least 2 cells
479 ana->SetMinEnergy(0.5); // avoid mip peak at E = 260 MeV
480 ana->SetMaxEnergy(1000);
d2655d46 481 ana->SetTimeCut(-1000,1000); // Open time cut
bef94c35 482 ana->SetMinDistanceToBadChannel(2, 4, 6);
483 }
484
485 if(kTM)
486 {
487 ana->SwitchOnTrackMatchRejection() ;
488 ana->SwitchOffTMHistoFill() ;
489 }
490 else
491 {
492 ana->SwitchOffTrackMatchRejection() ;
493 ana->SwitchOnTMHistoFill() ;
494 }
495
496 //PID cuts (shower shape)
497 ana->SwitchOffCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
498 AliCaloPID* caloPID = ana->GetCaloPID();
bef94c35 499
500 //EMCAL
501 caloPID->SetEMCALLambda0CutMax(0.27);
502 caloPID->SetEMCALLambda0CutMin(0.10);
503
504 caloPID->SetEMCALDEtaCut(0.025);
505 caloPID->SetEMCALDPhiCut(0.030);
506
507 //PHOS
508 caloPID->SetPHOSDispersionCut(2.5);
509 caloPID->SetPHOSRCut(2.);
510 if(kData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
511
512 ana->SwitchOnFillShowerShapeHistograms(); // Filled before photon shower shape selection
513
514 // Input / output delta AOD settings
515
516 if(!kData.Contains("delta"))
517 {
518 ana->SetOutputAODName(Form("Photon%s",kName.Data()));
519 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
520 //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
521 }
522 else ana->SetInputAODName(Form("Photon%s",kName.Data()));
523
524 //Set Histograms name tag, bins and ranges
525
526 ana->AddToHistogramsName(Form("AnaPhoton_TM%d_",kTM));
527 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
528
529 // Number of particle type MC histograms
530 ana->FillNOriginHistograms(8);
531 ana->FillNPrimaryHistograms(4);
532
533 ConfigureMC(ana);
534
535 if(kPrint) ana->Print("");
536
537 return ana;
538
539}
540
541//________________________________________________________________________________
542AliAnaElectron* ConfigureElectronAnalysis()
543{
544
545 AliAnaElectron *ana = new AliAnaElectron();
546 ana->SetDebug(kDebug); //10 for lots of messages
547
548 ana->SwitchOnFillShowerShapeHistograms();
549 ana->SwitchOffFillWeightHistograms() ;
550
551 if(kCalorimeter == "PHOS")
552 {
553 ana->SetNCellCut(2);// At least 2 cells
554 ana->SetMinPt(0.3);
555 ana->SetMinDistanceToBadChannel(2, 4, 5);
556 }
557 else
558 {//EMCAL
559 ana->SetNCellCut(1);// At least 2 cells
d2655d46 560 ana->SetMinPt(0.5); // no effect minimum EMCAL cut.
bef94c35 561 ana->SetMaxPt(100);
bef94c35 562 ana->SetMinDistanceToBadChannel(2, 4, 6);
d2655d46 563 ana->SetTimeCut(-1000,1000); // Open time cut
bef94c35 564 }
565
566 //Electron selection cuts with tracks
d2655d46 567
568 ana->SetEOverP(0.85, 1.2);
bef94c35 569 // TO DO, find a more suitable way to set this
570 if(kSimulation)
571 { // LHC11a
572 ana->SetdEdxCut(76, 85);
573 }
574 else // LHC11c
575 {
576 ana->SetdEdxCut(56, 64);
577 }
d2655d46 578
bef94c35 579 ana->SetCalorimeter(kCalorimeter);
580
581 ana->SwitchOffCaloPID();
582
583 ana->SwitchOffFiducialCut();
584
585 if(!kData.Contains("delta"))
586 {
587 ana->SetOutputAODName(Form("Electron%s",kName.Data()));
588 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
589 }
590 else ana->SetInputAODName(Form("Electron%s",kName.Data()));
591
592 //Set Histograms name tag, bins and ranges
593
594 ana->AddToHistogramsName(Form("AnaElectron_TM%d_",kTM));
595 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
596
597 ConfigureMC(ana);
598
599 if(kPrint) ana->Print("");
600
601 return ana ;
602
603}
604
605//__________________________________________________________________________________________
606AliAnaInsideClusterInvariantMass* ConfigureInClusterIMAnalysis(Float_t l0min, Float_t l0max)
607{
608
609 AliAnaInsideClusterInvariantMass *ana = new AliAnaInsideClusterInvariantMass();
610 ana->SetDebug(kDebug); //10 for lots of messages
611
612 // selection cuts
613
614 ana->SetMinEnergy(5);
615 ana->SetMaxEnergy(200.);
616 ana->SetMinNCells(3);
617 ana->SetM02Cut(l0min,l0max);
618 ana->SetCalorimeter(kCalorimeter);
619
620 //ana->AddToHistogramsName(Form("AnaInClusterIM_%1.2f_%1.2f_",l0min,l0max));
621 ana->AddToHistogramsName("AnaInClusterIM_");
622
623 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
624
625 AliCaloPID* caloPID = ana->GetCaloPID();
626 caloPID->SetEMCALDEtaCut(0.025);
627 caloPID->SetEMCALDPhiCut(0.030);
628 caloPID->SetClusterSplittingM02Cut(0,100); // Do the selection in the analysis class and not in the PID method to fill SS histograms
d2655d46 629
630 caloPID->SetPi0MassRange(0.10, 0.18);
631 caloPID->SetEtaMassRange(0.40, 0.60);
632 caloPID->SetPhotonMassRange(0.00, 0.08);
bef94c35 633
634 ConfigureMC(ana);
635
636 if(kPrint) ana->Print("");
637
638 return ana;
639
640}
641
642//_____________________________________________________
643AliAnaPi0EbE* ConfigurePi0EbEAnalysis(TString particle,
644 Int_t analysis)
645{
646
647 AliAnaPi0EbE *ana = new AliAnaPi0EbE();
648 ana->SetDebug(kDebug);//10 for lots of messages
649
650 ana->SetAnalysisType(analysis);
651 TString opt = "";
652 if(analysis==AliAnaPi0EbE::kIMCaloTracks) opt = "Conv";
653 if(analysis==AliAnaPi0EbE::kSSCalo) opt = "SS";
654
655 ana->SetMinPt(0.5);
656
657 if(kCalorimeter=="EMCAL")ana->SetPairTimeCut(15); // More strict than in pi0 inv mass analysis
658
659 ana->SetCalorimeter(kCalorimeter);
660
661 // Input / output delta AOD settings
662
663 ana->SetInputAODName(Form("Photon%s",kName.Data()));
664 if(!kInputDataType.Contains("delta"))
665 {
666 ana->SetOutputAODName(Form("%s%s%s",particle.Data(), opt.Data(), kName.Data()));
667 ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
668 }
669 else
670 ana->SetInputAODName(Form("%s%s%s",particle.Data(),opt.Data(),kName.Data()));
671
672 if(analysis == AliAnaPi0EbE::kIMCaloTracks) ana->SetInputAODGammaConvName("PhotonsCTS");
673
674 if(analysis!=AliAnaPi0EbE::kSSCalo)
675 {
676 AliNeutralMesonSelection *nms = ana->GetNeutralMesonSelection();
677 nms->SetParticle(particle);
bef94c35 678 // Tighten a bit mass cut with respect to default window
679 if(particle=="Pi0") nms->SetInvMassCutRange(0.120,0.150);
680 if(particle=="Eta") nms->SetInvMassCutRange(0.520,0.580);
681
682 nms->SwitchOnAngleSelection();
683 nms->KeepNeutralMesonSelectionHistos(kTRUE);
684 //nms->SetAngleMaxParam(2,0.2);
685 nms->SetHistoERangeAndNBins(0, 20, 80) ;
686 //nms->SetHistoIMRangeAndNBins(0, 1, 400);
687 }
d2655d46 688 else
689 { // cluster splitting settings
690 ana->SetTimeCut(-1000,1000); // Open time cut
691 AliCaloPID* caloPID = ana->GetCaloPID();
692 caloPID->SetPi0MassRange(0.10, 0.18);
693 caloPID->SetEtaMassRange(0.40, 0.60);
694 caloPID->SetPhotonMassRange(0.00, 0.08);
695 caloPID->SetClusterSplittingM02Cut(0.5,100); // Do the selection in the analysis class and not in the PID method to fill SS histograms
696 }
bef94c35 697
698 ana->SwitchOnSelectedClusterHistoFill(); // Shower shape et al.
699 ana->SwitchOffFillWeightHistograms();
700
701 if(!kTM) ana->SwitchOnTMHistoFill();
702 else ana->SwitchOffTMHistoFill();
703
704 //Set Histograms name tag, bins and ranges
705
706 ana->AddToHistogramsName(Form("Ana%s%sEbE_TM%d_",particle.Data(),opt.Data(),kTM));
707 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
708
709 ConfigureMC(ana);
710
711 if(kPrint) ana->Print("");
712
713 return ana;
714
715}
716
bef94c35 717//________________________________________
718AliAnaCalorimeterQA* ConfigureQAAnalysis()
719{
720
721 AliAnaCalorimeterQA *ana = new AliAnaCalorimeterQA();
722 ana->SetDebug(kDebug); //10 for lots of messages
723 ana->SetCalorimeter(kCalorimeter);
724
725 ana->SetTimeCut(-1000,1000); // Open time cut
726
727 // Study inter detector correlation (PHOS, EMCAL, Tracks, V0)
d2655d46 728 ana->SwitchOffCorrelation(); // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
bef94c35 729
d2655d46 730 // correlation between calorimeters, tracks, v0 ...
731 // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
732 if(kCalorimeter=="EMCAL" && kClusterArray=="") ana->SwitchOnCorrelation();
733 else ana->SwitchOffCorrelation();
bef94c35 734
d2655d46 735 // Study exotic clusters PHOS and EMCAL
736 if(kClusterArray=="") ana->SwitchOnStudyBadClusters() ;
737 else ana->SwitchOffStudyBadClusters() ;
738
bef94c35 739 ana->SwitchOffFiducialCut();
740 ana->SwitchOffFillAllTH3Histogram();
741 ana->SwitchOffFillAllPositionHistogram();
742 ana->SwitchOffFillAllPositionHistogram2();
743 if(!kExotic)ana->SwitchOnStudyBadClusters();
744 else ana->SwitchOffStudyBadClusters();
745 ana->SwitchOffStudyClustersAsymmetry();
746 ana->SwitchOffStudyWeight();
747 ana->SwitchOnFillAllTrackMatchingHistogram();
748
bef94c35 749 ana->AddToHistogramsName("QA_"); //Begining of histograms name
750 SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
751
752 ConfigureMC(ana);
753
754 if(kPrint) ana->Print("");
755
756 return ana;
757
758}
759
760//________________________________________________________
761void ConfigureMC(AliAnaCaloTrackCorrBaseClass* ana)
762{
763 if(kSimulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
764 else ana->SwitchOffDataMC() ;
765
766 //Set here generator name, default pythia
767 //ana->GetMCAnalysisUtils()->SetMCGenerator("");
768}
769
770//________________________________________________________
771void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges)
772{
773 // Set common bins for all analysis and MC histograms filling
774
775 histoRanges->SetHistoPtRangeAndNBins(0, 100, 200) ; // Energy and pt histograms
776
777 if(kCalorimeter=="EMCAL")
778 {
779 if(kYears==2010)
780 {
781 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 122*TMath::DegToRad(), 78) ;
782 histoRanges->SetHistoXRangeAndNBins(-230,90,120); // QA
783 histoRanges->SetHistoYRangeAndNBins(370,450,40); // QA
784 }
785 else if(kYears==2011)
786 {
787 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
788 histoRanges->SetHistoXRangeAndNBins(-600,90,200); // QA
789 histoRanges->SetHistoYRangeAndNBins(100,450,100); // QA
790 }
791 else
792 {
793 histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 190*TMath::DegToRad(), 122) ;
794 histoRanges->SetHistoXRangeAndNBins(-100,90,200); // QA
795 histoRanges->SetHistoYRangeAndNBins(50,450,100); // QA
796 }
797
798 histoRanges->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
799 }
800 else
801 {
802 histoRanges->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
803 histoRanges->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
804 }
805
806 histoRanges->SetHistoShowerShapeRangeAndNBins(-0.1, 4.9, 500);
807
808 // Invariant mass histoRangeslysis
809 histoRanges->SetHistoMassRangeAndNBins(0., 1., 200) ;
810 histoRanges->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
811
812 // check if time calibration is on
813 histoRanges->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
814 histoRanges->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
815
816 // track-cluster residuals
817 histoRanges->SetHistoTrackResidualEtaRangeAndNBins(-0.15,0.15,300);
818 histoRanges->SetHistoTrackResidualPhiRangeAndNBins(-0.15,0.15,300);
819
820 // QA, electron, charged
821 histoRanges->SetHistoPOverERangeAndNBins(0,10.,100);
822 histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
823
824 // QA
825 histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
826 histoRanges->SetHistodRRangeAndNBins(0.,TMath::Pi(),150);
827 histoRanges->SetHistoRatioRangeAndNBins(0.,2.,100);
828 histoRanges->SetHistoVertexDistRangeAndNBins(0.,500.,500);
829 histoRanges->SetHistoNClusterCellRangeAndNBins(0,500,500);
830 histoRanges->SetHistoZRangeAndNBins(-400,400,200);
831 histoRanges->SetHistoRRangeAndNBins(400,450,25);
832 histoRanges->SetHistoV0SignalRangeAndNBins(0,5000,500);
833 histoRanges->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
834 histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,5000,500);
835
836}
837
838