fix settings in case of usage with tender
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / macros / AddTaskGammaJetCorrelation.C
1 // Configuration macro for analysis of photon-jet analysis
2 // Author: Adam Matyja
3 // based on AddTaskIsoPhoton by Gustavo Conesa & Marie Germain.
4
5 //new macro
6 TString kGammaJetCorrelationName          = "";
7
8 AliAnalysisTaskCaloTrackCorrelation *AddTaskGammaJetCorrelation(const Float_t  isoCone       = 0.4,
9                                                                 const Float_t  isoPth        = 0.5,
10                                                                 const Double_t maxLambda0Cut = 0.5,
11                                                                 const Int_t    maxNLMcut     = 2,
12                                                                 const Bool_t   timecut       = kFALSE,
13                                                                 const TString  calorimeter   = "EMCAL",
14                                                                 const Bool_t   simulation    = kFALSE,
15                                                                 const Bool_t   eventsel      = kFALSE,
16                                                                 const Bool_t   exotic        = kTRUE,
17                                                                 const Bool_t   nonlin        = kFALSE,
18                                                                 const TString  collision     = "pp",
19                                                                 const TString  trigger       = "MB",
20                                                                 const TString  firedTrigger  = "EG1",
21                                                                 const TString  clustersArray = "V1",
22                                                                 const Bool_t   mix           = kTRUE,
23                                                                 const Bool_t   tm            = kTRUE,
24                                                                 const Int_t    minCen        = -1,
25                                                                 const Int_t    maxCen        = -1,
26                                                                 const TString  jetBranchName = "clustersAOD_ANTIKT04_B0_Filter00272_Cut00150_Skip00",
27                                                                 const TString  jetBkgBranchName = "jeteventbackground_clustersAOD_KT04_B0_Filter00768_Cut00150_Skip00",
28                                                                 const Float_t  jetMinPt      = 0,
29                                                                 const Float_t  minDeltaPhi   = 1.5,
30                                                                 const Float_t  maxDeltaPhi   = 4.5,
31                                                                 const Float_t  minPtRatio    = 0,
32                                                                 const Float_t  maxPtRatio    = 5,   
33                                                                 const Int_t    debug         = -1,
34                                                                 const Bool_t   printSettings = kFALSE,
35                                                                 const Double_t scaleFactor   = -1
36                                                                 )
37 {
38   // Creates a CaloTrackCorr task, configures it and adds it to the analysis manager.
39
40   // Get the pointer to the existing analysis manager via the static access method.
41   
42   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
43   if (!mgr) 
44   {
45     ::Error("AddTask", "No analysis manager to connect to.");
46     return NULL;
47   }  
48   
49   // Check the analysis type using the event handlers connected to the analysis manager.
50   
51   if (!mgr->GetInputEventHandler()) 
52   {
53     ::Error("AddTask", "This task requires an input event handler");
54     return NULL;
55   }
56   
57 //  inputDataType = "AOD";
58 //  if(!kData.Contains("delta"))
59 //    inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
60   
61   //input jets
62   TString     deltaAODJetName   = "AliAOD.Jets.root"; //Jet input AOD name
63   if(deltaAODJetName.Length()!=0)
64     {
65       // External file with Jets
66      // aodHandler->AddFriend(deltaAODJetName.Data());
67       mgr->RegisterExtraFile(deltaAODJetName.Data());
68       cout<<"Jet file registered "<<endl;
69       cout<<"Extra files: "<<mgr->GetExtraFiles()<<endl;
70     }
71
72
73
74   Bool_t useKinematics = kFALSE;
75   useKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
76
77   // Name for containers
78   
79   //kGammaJetCorrelationName = Form("%s_Trig%s_Cl%s_TM%d_R%1.1f_Pt%1.1f",calorimeter.Data(), trigger.Data(),clustersArray.Data(),tm,cone,pth);
80   //  kGammaJetCorrelationName = Form("%s_Trig%s_Cl%s_TM%d",calorimeter.Data(), trigger.Data(),clustersArray.Data(),tm);
81   kGammaJetCorrelationName = Form("%s_Trig%s_Fired%s_Cl%s_TM%d",calorimeter.Data(), trigger.Data(),firedTrigger.Data(),clustersArray.Data(),tm);//<<<---changed here
82
83   
84   if(collision=="PbPb" && maxCen>=0) kGammaJetCorrelationName+=Form("Cen%d_%d",minCen,maxCen);
85     
86   printf("<<<< NAME: %s >>>>>\n",kGammaJetCorrelationName.Data());
87   
88   // #### Configure analysis ####
89     
90   AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
91   printf("SCALE FACTOR %e\n",scaleFactor);
92   maker->SetScaleFactor(scaleFactor); // for MC, negative (not scaled) by default
93   
94   // General frame setting and configuration
95   maker->SetReader   (ConfigureReader(mgr->GetInputEventHandler()->GetDataType(),calorimeter,useKinematics,simulation,eventsel,nonlin,timecut,collision,trigger,firedTrigger,clustersArray,jetBranchName,jetBkgBranchName,mix,minCen,maxCen,debug,printSettings)   ); 
96   maker->SetCaloUtils(ConfigureCaloUtils(clustersArray,collision,nonlin,exotic,simulation,timecut,debug,printSettings)); 
97   
98   // Analysis tasks setting and configuration
99   Int_t n = 0;//Analysis number, order is important
100
101   // Isolation settings
102   Int_t partInCone = AliIsolationCut::kNeutralAndCharged; // kOnlyCharged;
103   Int_t thresType  = AliIsolationCut::kPtThresIC;//  AliIsolationCut::kSumPtFracIC ; 
104   //Float_t isoCone = -1;
105   //Float_t isoPth  = -1;
106   
107   maker->AddAnalysis(ConfigurePhotonAnalysis(calorimeter,tm,simulation,maxLambda0Cut,maxNLMcut,debug,printSettings), n++); // Photon cluster selection
108   maker->AddAnalysis(ConfigureIsolationAnalysis(calorimeter,collision,"Photon", partInCone,thresType, isoCone, isoPth,tm,kFALSE,simulation,debug,printSettings), n++); // Photon isolation   
109   maker->AddAnalysis(ConfigurePhotonJetAnalysis(calorimeter,isoCone,jetMinPt,minDeltaPhi,maxDeltaPhi,minPtRatio,maxPtRatio,simulation,debug,printSettings), n++);// photon-jet correlation analysis
110
111   maker->SetAnaDebug(debug)  ;
112   maker->SwitchOnHistogramsMaker()  ;
113   //if(kData.Contains("delta")) maker->SwitchOffAODsMaker() ;
114   //else                        maker->SwitchOnAODsMaker()  ;
115   
116   if(printSettings) maker->Print("");
117   
118   printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, calorimeter.Data());
119   // Create task
120   
121   AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("CaloTrackCorr%s",kGammaJetCorrelationName.Data()));
122   task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
123   task->SetDebugLevel(debug);
124   task->SetBranches("ESD:AliESDRun.,AliESDHeader"); 
125   task->SetAnalysisMaker(maker);
126   mgr->AddTask(task);
127   
128   //Create containers
129   
130   //if(outputfile.Length()==0) outputfile = AliAnalysisManager::GetCommonFileName(); 
131   TString outputfile = AliAnalysisManager::GetCommonFileName();
132   
133   AliAnalysisDataContainer *cout_pc   = mgr->CreateContainer(kGammaJetCorrelationName, TList::Class(), 
134                                                              AliAnalysisManager::kOutputContainer, 
135                                                              Form("%s",outputfile.Data()));
136         
137   AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("Param_%s",kGammaJetCorrelationName.Data()), TList::Class(), 
138                                                              AliAnalysisManager::kParamContainer, 
139                                                              "AnalysisParameters.root");
140   
141   // Create ONLY the output containers for the data produced by the task.
142   // Get and connect other common input/output containers via the manager as below
143   //==============================================================================
144   mgr->ConnectInput  (task, 0, mgr->GetCommonInputContainer());
145   // AOD output slot will be used in a different way in future
146   //if(!kData.Contains("delta")   && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
147   mgr->ConnectOutput (task, 1, cout_pc);
148   mgr->ConnectOutput (task, 2, cout_cuts);
149     
150   if(!mix)
151   {    
152     UInt_t mask =  SetTriggerMaskFromName(trigger);
153     task->SelectCollisionCandidates(mask);
154   } 
155   
156   return task;
157 }
158
159 //____________________________________
160 AliCaloTrackReader * ConfigureReader(TString inputDataType = "AOD",TString calorimeter = "EMCAL",Bool_t useKinematics = kFALSE,
161                                      Bool_t simulation = kFALSE,Bool_t   eventsel      = kFALSE,Bool_t nonlin = kTRUE, Bool_t timecut = kFALSE,
162                                      TString  collision     = "pp",TString trigger="MB",TString firedTrigger="EG1",
163                                      TString  clustersArray = "V1", TString  jetBranchName = "jets", TString  jetBkgBranchName = "jets",
164                                      Bool_t  mix           = kFALSE,
165                                      Float_t minCen = -1, Float_t maxCen = -1,
166                                      Int_t debug = -1,Bool_t printSettings = kFALSE)
167 {
168   
169   Bool_t useTender=kTRUE;
170
171   if(simulation)
172   {
173     if (!useKinematics && inputDataType=="AOD") useKinematics = kTRUE; //AOD primary should be available ...
174   }
175   
176   cout<<"********* ACCESS KINE? "<<useKinematics<< endl;
177
178
179
180   AliCaloTrackReader * reader = 0;
181   if     (inputDataType == "AOD") reader = new AliCaloTrackAODReader();
182   else if(inputDataType == "ESD") reader = new AliCaloTrackESDReader();
183   else printf("AliCaloTrackReader::ConfigureReader() - Data not known InputData=%s\n",inputDataType.Data());
184   
185   reader->SetDebug(debug);//10 for lots of messages
186
187   if(useTender){
188     reader->SwitchOffTriggerPatchMatching();
189     reader->SwitchOffBadTriggerEventsRemoval();
190   }
191
192   if(simulation)
193   {
194     // Event rejection cuts for jet-jet simulations, do not use in other
195     reader->SetPtHardAndJetPtComparison(kTRUE);
196     reader->SetPtHardAndJetPtFactor(4);
197     
198     reader->SetPtHardAndClusterPtComparison(kTRUE);
199     reader->SetPtHardAndClusterPtFactor(1.5);
200   }
201
202   //Delta AOD?
203   //reader->SetDeltaAODFileName("");
204   //if(kOutputAOD) reader->SwitchOnWriteDeltaAOD()  ;
205   
206   // MC settings
207   if(useKinematics){
208     if(inputDataType == "ESD"){
209       reader->SwitchOnStack();          
210       reader->SwitchOffAODMCParticles(); 
211     }
212     else if(inputDataType == "AOD"){
213       reader->SwitchOffStack();          
214       reader->SwitchOnAODMCParticles(); 
215     }
216   }  
217   
218   //------------------------
219   // Detector input filling
220   //------------------------
221   
222   //Min cluster/track E
223   reader->SetEMCALEMin(0.3); 
224   //reader->SetEMCALEMin(0.);// <<<----changed here 
225   reader->SetEMCALEMax(1000); 
226   reader->SetPHOSEMin(0.3);
227   reader->SetPHOSEMax(1000);
228   //  reader->SetCTSPtMin(0.2);
229   reader->SetCTSPtMin(0.15);// <<<----changed here 
230   reader->SetCTSPtMax(1000);
231
232   //-----------------------------------------------------------------
233   // Jet part
234   //-----------------------------------------------------------------
235   reader->SwitchOnNonStandardJets();
236   //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00768_Cut00150_Skip00");
237   //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B1_Filter00768_Cut00150_Skip00");//in PbPb
238   //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00272_Cut00150_Skip00");//in pp 2.76 LHC11a,7 LHC11c
239   //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00768_Cut00150_Skip02");//in pp 7 LHC13e4 MC
240   //reader->SetInputNonStandardJetBranchName("clustersAOD_ANTIKT04_B0_Filter00272_Cut00150_Skip00");//in pp 7 LHC12a15f MC
241   reader->SetInputNonStandardJetBranchName(jetBranchName.Data());
242   if(jetBkgBranchName.Length()!=0) {
243     reader->SwitchOnBackgroundJets();
244     reader->SetInputBackgroundJetBranchName(jetBkgBranchName.Data());
245   } else {
246     reader->SwitchOffBackgroundJets();
247   }
248   //reader->SetInputBackgroundJetBranchName("jeteventbackground_clustersAOD_KT04_B0_Filter00768_Cut00150_Skip00");//in pp 7 LHC13e4 MC
249
250
251   // Time cuts
252   if(simulation) 
253   {
254     reader->SwitchOffUseTrackTimeCut();
255     reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
256     reader->SwitchOffUseEMCALTimeCut() ;   
257     reader->SwitchOffUseParametrizedTimeCut();
258   }
259   else
260   {
261     reader->SwitchOffUseParametrizedTimeCut();
262     if(timecut)
263      {
264         printf("Set time cut \n");
265         reader->SwitchOnUseEMCALTimeCut();
266         //Absolute window
267         reader->SetEMCALTimeCut(-30.,30.); // default is -25ns-20ns
268       }
269     else
270       {
271         printf("Off time cuts time cut \n");
272         reader->SwitchOffUseEMCALTimeCut();
273         //Absolute window
274         reader->SetEMCALTimeCut(-1.e6,1.e6);
275       }
276
277     //if(kCalibT)
278     //{ 
279       //printf("Set time cut parameters for run %d\n",kRunNumber);
280       //reader->SetEMCALTimeCut(-20,20); 
281       //reader->SwitchOnUseParametrizedTimeCut();
282       //if     (kRunNumber >= 151636 && kRunNumber <= 155384 )
283       //{
284       //  printf("Set time parameters for LHC11c\n");
285       //  reader->SetEMCALParametrizedMinTimeCut(0,-5  ); reader->SetEMCALParametrizedMinTimeCut(1,-1 ); reader->SetEMCALParametrizedMinTimeCut(2, 1.87); reader->SetEMCALParametrizedMinTimeCut(3, 0.4);   
286       //  reader->SetEMCALParametrizedMaxTimeCut(0, 3.5); reader->SetEMCALParametrizedMaxTimeCut(1, 50); reader->SetEMCALParametrizedMaxTimeCut(2, 0.15); reader->SetEMCALParametrizedMaxTimeCut(3, 1.6);   
287       //}
288       //else if(kRunNumber >= 156447 && kRunNumber <= 159635 )
289       //{
290       //  printf("Set time parameters for LHC11d\n");
291       //  reader->SetEMCALParametrizedMinTimeCut(0,-5);  reader->SetEMCALParametrizedMinTimeCut(1,-1 );  reader->SetEMCALParametrizedMinTimeCut(2, 3.5 ); reader->SetEMCALParametrizedMinTimeCut(3, 1.  );   
292       //  reader->SetEMCALParametrizedMaxTimeCut(0, 5);  reader->SetEMCALParametrizedMaxTimeCut(1, 50);  reader->SetEMCALParametrizedMaxTimeCut(2, 0.45); reader->SetEMCALParametrizedMaxTimeCut(3, 1.25);   
293       //}
294       //else 
295       //{
296       //  printf("*** Fixed time cut 20 ns *** \n");
297       //  reader->SetEMCALTimeCut(-20,20);
298       //}
299 //      
300 //    }
301 //    else
302 //    {
303 //      reader->SwitchOffUseEMCALTimeCut();
304 //      reader->SetEMCALTimeCut(-1e10,1e10); // Open time cut
305 //      reader->SwitchOffUseParametrizedTimeCut(); 
306 //    }
307
308   }  
309   
310   reader->SwitchOnFiducialCut();
311   //reader->SwitchOffFiducialCut();// <<<----changed here 
312   //reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;
313   reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.9, 0, 360) ;// <<<--- changed here
314
315   // Tracks
316
317   //  reader->SwitchOffCTS();//here changed 0n->off
318   reader->SwitchOnCTS();//here changed 0n->off
319
320   reader->SwitchOffRecalculateVertexBC();
321   reader->SwitchOffVertexBCEventSelection();
322   
323   reader->SwitchOffUseTrackTimeCut();
324   reader->SetTrackTimeCut(0,50);
325
326   if(inputDataType=="ESD")
327   {
328     gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
329     AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10041004);
330     reader->SetTrackCuts(esdTrackCuts);
331     reader->SwitchOnConstrainTrackToVertex();
332   }
333   else if(inputDataType=="AOD")
334   {
335     reader->SwitchOnAODHybridTrackSelection(); // Check that the AODs have Hybrids!!!!
336     reader->SetTrackStatus(AliVTrack::kITSrefit);    
337     //reader->SetTrackFilterMask(128);           // Filter bit, not mask, use if off hybrid
338   }
339   
340   // Calorimeter
341   
342   reader->SetEMCALClusterListName(clustersArray);
343   if(clustersArray == "" && !useTender)
344   {
345     printf("**************** Standard EMCAL clusters branch analysis **************** \n");
346     reader->SwitchOnClusterRecalculation();
347     // Check in ConfigureCaloUtils that the recalibration and bad map are ON 
348   }
349   else 
350   {
351     printf("**************** Input for analysis is Clusterizer %s **************** \n", clustersArray.Data());
352     reader->SwitchOffClusterRecalculation();
353   }  
354   
355   if(!nonlin) reader->SwitchOffClusterELinearityCorrection();
356   else        reader->SwitchOnClusterELinearityCorrection();
357
358   if(calorimeter == "EMCAL") {
359     reader->SwitchOnEMCALCells();  
360     reader->SwitchOnEMCAL();
361   }
362   if(calorimeter == "PHOS") { 
363     reader->SwitchOnPHOSCells();  
364     reader->SwitchOnPHOS();
365   }
366   
367   // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
368   //if(kData.Contains("delta"))
369   //{
370   //  reader->SwitchOffEMCAL();
371   //  reader->SwitchOffPHOS();
372   //  reader->SwitchOffEMCALCells(); 
373   //  reader->SwitchOffPHOSCells(); 
374   //}
375   
376   //-----------------
377   // Event selection
378   //-----------------
379   
380   //if(!useKinematics) reader->SetFiredTriggerClassName("CEMC7EGA-B-NOPF-CENTNOTRD"); // L1 Gamma
381   if(!useKinematics) {
382     if(collision =="pPb" && trigger=="EMCEGA") {
383       reader->SetFiredTriggerClassName(firedTrigger);
384     }
385   }
386
387   // For mixing with AliAnaParticleHadronCorrelation switch it off
388   if(mix)
389   {
390     reader->SwitchOffEventTriggerAtSE();
391     UInt_t mask =  SetTriggerMaskFromName(trigger);
392     reader->SetEventTriggerMaks(mask); // Only for mixing and SwitchOffEventTriggerAtSE();
393     //reader->SetMixEventTriggerMaks(AliVEvent::kMB); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
394     reader->SetMixEventTriggerMaks(AliVEvent::kAnyINT); // Careful, not all productions work with kMB, try kINT7, kINT1, kAnyINT
395
396     printf("---Trigger selection done in AliCaloTrackReader!!!\n");
397   }
398   else 
399     reader->SwitchOnEventTriggerAtSE();
400   
401   reader->SetZvertexCut(10.);                // Open cut
402   reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex
403   reader->SwitchOnRejectNoTrackEvents();//<<<--- changed here, new added
404
405   if(eventsel)
406   {
407     reader->SwitchOnPileUpEventRejection();   // remove pileup by default  
408     reader->SwitchOnV0ANDSelection() ;        // and besides v0 AND
409   }
410   else 
411   {
412     reader->SwitchOffPileUpEventRejection();  // remove pileup by default   
413     reader->SwitchOffV0ANDSelection() ;        // and besides v0 AND
414   }
415     
416   if(collision=="PbPb") 
417   {
418     // Centrality
419     reader->SetCentralityClass("V0M");
420     reader->SetCentralityOpt(10);  // 10 (c= 0-10, 10-20 ...), 20  (c= 0-5, 5-10 ...) or 100 (c= 1, 2, 3 ..)
421     reader->SetCentralityBin(minCen,maxCen); // Accept all events, if not select range
422     
423     // Event plane (only used in Maker and mixing for AliAnaPi0/AliAnaHadronCorrelation for the moment)
424     reader->SetEventPlaneMethod("V0");
425   }
426   
427   if(printSettings) reader->Print("");
428   
429   return reader;
430   
431 }
432
433 //_______________________________________
434 AliCalorimeterUtils* ConfigureCaloUtils( TString  clustersArray = "V1",TString  collision     = "pp",Bool_t nonlin = kTRUE,Bool_t exotic = kTRUE ,Bool_t simulation = kFALSE,Bool_t timecut = kFALSE,Int_t debug = -1,Bool_t printSettings = kFALSE)
435 {
436   
437   Bool_t useTender=kTRUE;
438
439   AliCalorimeterUtils *cu = new AliCalorimeterUtils;
440   cu->SetDebug(debug);
441   
442   // Remove clusters close to borders, at least max energy cell is 1 cell away 
443   //cu->SetNumberOfCellsFromEMCALBorder(0);// <<<----changed here 
444   cu->SetNumberOfCellsFromEMCALBorder(1);
445   cu->SetNumberOfCellsFromPHOSBorder(2);
446   
447   // Search of local maxima in cluster
448   if(collision=="pp" || collision=="pPb")
449   {
450     cu->SetLocalMaximaCutE(0.1);
451     cu->SetLocalMaximaCutEDiff(0.03);
452   }
453   else 
454   {
455     cu->SetLocalMaximaCutE(0.2);
456     cu->SetLocalMaximaCutEDiff(0.03);
457   }
458   
459   cu->SwitchOffClusterPlot();
460
461   //if(kRecalTM) cu->SwitchOnRecalculateClusterTrackMatching(); // Done in clusterization
462   //else         
463   cu->SwitchOffRecalculateClusterTrackMatching();
464   
465   if(useTender)
466     cu->SwitchOffBadChannelsRemoval() ;
467   else
468     cu->SwitchOnBadChannelsRemoval() ;
469
470   //EMCAL settings
471   if(!simulation)
472     cu->SwitchOnLoadOwnEMCALGeometryMatrices();
473
474   if(!useTender){  
475     AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
476     
477     if(!simulation)
478       {
479         cu->SwitchOnRecalibration(); // Check the reader if it is taken into account during filtering
480         //if(clustersArray == "" && !kTender) cu->SwitchOnRunDepCorrection(); 
481         if(clustersArray == "") cu->SwitchOnRunDepCorrection(); 
482       }
483     
484     cu->SwitchOnEMCALOADB();//FIX ME!!!
485
486     gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C");
487     ConfigureEMCALRecoUtils(recou,
488                             simulation,                             
489                             exotic,
490                             nonlin,
491                             kFALSE, // e calib
492                             kFALSE, // bad map
493                             kFALSE); // time calib
494     //kCalibE, 
495     //kBadMap,
496     //kCalibT);   
497     recou->SetExoticCellDiffTimeCut(1e10);
498     if(timecut) recou->SetExoticCellDiffTimeCut(50.);
499   }//end tender
500
501
502   if( nonlin ) 
503   { 
504 //    printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
505 //    //CAREFUL only for the latest simulation
506 //    recou->SetNonLinearityFunction(AliEMCALRecoUtils::kBeamTestCorrected);
507 //    recou->SetNonLinearityParam(0,9.81039e-01);
508 //    recou->SetNonLinearityParam(1,1.13508e-01);
509 //    recou->SetNonLinearityParam(2,1.00173e+00); 
510 //    recou->SetNonLinearityParam(3,9.67998e-02);
511 //    recou->SetNonLinearityParam(4,2.19381e+02);
512 //    recou->SetNonLinearityParam(5,6.31604e+01);
513 //    recou->SetNonLinearityParam(6,1);
514     printf("*** SET cluster non linearity correction ***\n");
515     cu->SwitchOnCorrectClusterLinearity();
516   }
517     
518   
519   printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
520   printf("ConfigureCaloUtils() - EMCAL BadMap        ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
521   
522   cu->SetNumberOfSuperModulesUsed(10);
523   // PHOS 
524   cu->SwitchOffLoadOwnPHOSGeometryMatrices();
525     
526   if(printSettings) cu->Print("");
527   
528   return cu;
529   
530 }
531
532 //_____________________________________
533 AliAnaPhoton* ConfigurePhotonAnalysis(TString calorimeter = "EMCAL",Bool_t tm = kFALSE,Bool_t simulation = kFALSE,Double_t maxLambda0Cut=0.5,Int_t maxNLMcut=2,Int_t debug = -1,Bool_t printSettings = kFALSE)
534 {
535   
536   AliAnaPhoton *ana = new AliAnaPhoton();
537   ana->SetDebug(debug); //10 for lots of messages
538   
539   // cluster selection cuts
540   
541   ana->SwitchOffFiducialCut();
542
543   ana->SetCalorimeter(calorimeter);
544   
545   if(calorimeter == "PHOS")
546   {
547     ana->SetNCellCut(2);// At least 3 cells
548     ana->SetMinPt(0.3);
549     ana->SetMinDistanceToBadChannel(2, 4, 5);
550     ana->SetTimeCut(-1e10,1e10); // open cut
551   }
552   else 
553   {//EMCAL
554     ana->SetNCellCut(1);// At least 2 cells
555     ana->SetMinEnergy(0.3); // avoid mip peak at E = 260 MeV
556     ana->SetMaxEnergy(1000); 
557     //ana->SetTimeCut(-1e10,1e10); // open cut, usual time window of [425-825] ns if time recalibration is off //<<<---modified here
558     // restrict to less than 100 ns when time calibration is on 
559     ana->SetMinDistanceToBadChannel(2, 4, 6); 
560     // Not useful if M02 cut is already strong
561     ana->SetNLMCut(1, maxNLMcut) ;//[1,2]
562     //ana->SetNLMCut(1, 10) ;//<<<----changed here 
563     //ana->SetNLMCut(1, 1) ;//<<<----changed here 
564   }
565   
566   if(tm)
567   {
568     ana->SwitchOnTrackMatchRejection() ;
569     ana->SwitchOffTMHistoFill() ;
570   }
571   else
572   {
573     ana->SwitchOffTrackMatchRejection() ;
574     ana->SwitchOnTMHistoFill() ;
575   }
576   
577   
578   //PID cuts (shower shape)
579   ana->SwitchOnCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
580   AliCaloPID* caloPID = ana->GetCaloPID();
581   //Not used in bayesian
582   
583   //EMCAL
584   caloPID->SetEMCALLambda0CutMax(maxLambda0Cut);//0.27 was before//0.50//<<<----changed here
585   caloPID->SetEMCALLambda0CutMin(0.10);
586   
587   caloPID->SetEMCALDEtaCut(0.025);
588   caloPID->SetEMCALDPhiCut(0.030);
589     
590   //PHOS
591   caloPID->SetPHOSDispersionCut(2.5);
592   caloPID->SetPHOSRCut(2.);
593   //if(kInputData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
594       
595   ana->SwitchOnFillShowerShapeHistograms();  // Filled before photon shower shape selection <<<--- changed here
596   //ana->SwitchOffFillShowerShapeHistograms();  // Filled before photon shower shape selection
597   ana->SwitchOffFillPileUpHistograms();
598
599   // Input / output delta AOD settings
600   
601   //if(!kData.Contains("delta")) 
602   //{
603   ana->SetOutputAODName(Form("Photon%s",kGammaJetCorrelationName.Data()));
604   ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
605   //  //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
606   //}
607   //else 
608   ana->SetInputAODName(Form("Photon%s",kGammaJetCorrelationName.Data()));
609   
610   //Set Histograms name tag, bins and ranges
611   
612   ana->AddToHistogramsName(Form("AnaPhoton_TM%d_",tm));
613   SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
614   
615   // Number of particle type MC histograms
616   ana->FillNOriginHistograms(20);
617   ana->FillNPrimaryHistograms(20);
618   
619   ConfigureMC(ana,simulation);
620   
621   if(printSettings) ana->Print("");
622   
623   return ana;
624   
625 }
626
627 //____________________________________________________________________________________________________
628 AliAnaParticleIsolation* ConfigureIsolationAnalysis(TString calorimeter = "EMCAL",
629                                                     TString  collision     = "pp",
630                                                     TString particle="Photon", 
631                                                     Int_t  partInCone = AliIsolationCut::kOnlyCharged,
632                                                     Int_t  thresType  = AliIsolationCut::kSumPtFracIC,
633                                                     Float_t cone = 0.3,
634                                                     Float_t pth  = 0.3,
635                                                     Bool_t tm = kFALSE,
636                                                     Bool_t multi      = kFALSE,Bool_t simulation = kFALSE,
637                                                     Int_t debug = -1,
638                                                     Bool_t printSettings = kFALSE)
639 {
640   
641   AliAnaParticleIsolation *ana = new AliAnaParticleIsolation();
642   ana->SetDebug(debug);
643     
644   ana->SwitchOnFiducialCut();
645   //Avoid borders of EMCal
646   if(calorimeter=="EMCAL")
647     ana->GetFiducialCut()->SetSimpleEMCALFiducialCut(0.6, 86, 174) ;
648
649   // Same Eta as EMCal, cut in phi if EMCAL was triggering
650   if(particle=="Hadron"  || particle.Contains("CTS"))
651   {
652     //if(trigger.Contains("EMC"))
653     //  ana->GetFiducialCut()->SetSimpleCTSFiducialCut  (0.6, 260, 360) ;
654     //else
655       ana->GetFiducialCut()->SetSimpleCTSFiducialCut  (0.6, 0, 360) ;    
656   }
657   
658   ana->SetMinPt(10);//<<---changed here
659   
660   // Input / output delta AOD settings
661   
662   ana->SetInputAODName(Form("%s%s",particle.Data(),kGammaJetCorrelationName.Data()));
663   ana->SetAODObjArrayName(Form("IC%s_%s",particle.Data(),kGammaJetCorrelationName.Data())); 
664   
665   ana->SetCalorimeter(calorimeter);
666   
667   if(!tm)  ana->SwitchOnTMHistoFill();
668   else      ana->SwitchOffTMHistoFill();
669   
670   //if(particle=="Photon")ana->SwitchOnSSHistoFill();
671   //else                  ana->SwitchOffSSHistoFill();
672   
673   ana->SwitchOffSSHistoFill();
674   ana->SwitchOffFillPileUpHistograms();
675
676   //Do settings for main isolation cut class
677   AliIsolationCut * ic =  ana->GetIsolationCut();       
678   ic->SetDebug(debug);
679   
680   if(cone >0 && pth > 0)
681   {
682     ic->SetPtThreshold(pth);
683     ic->SetConeSize(cone);
684   }
685   else
686   {
687     if(collision=="pp") 
688     {
689       ic->SetPtThreshold(1.);//<<---changed here was 0.5,1
690       ic->SetConeSize(0.3);//<<---changed here was 0.4
691     }
692     if(collision=="pPb")
693       {
694         ic->SetPtThreshold(1.0);
695         ic->SetConeSize(0.3);
696       }
697
698     if(collision=="PbPb")
699     {
700       ic->SetPtThreshold(3.);
701       //ic->SetPtThreshold(1.);
702       ic->SetConeSize(0.3);
703     }
704   }
705   
706   ic->SetPtFraction(0.1);
707   ic->SetSumPtThreshold(1.0) ;
708   ic->SetParticleTypeInCone(partInCone);
709   ic->SetICMethod(thresType);
710   
711   //Do or not do isolation with previously produced AODs.
712   //No effect if use of SwitchOnSeveralIsolation()
713   ana->SwitchOffReIsolation();
714   
715   //Multiple IC
716   if(multi) 
717   {
718     ic->SetConeSize(1.);    // Take all for first iteration
719     ic->SetPtThreshold(100);// Take all for first iteration
720     ana->SwitchOnSeveralIsolation() ;
721     ana->SetAODObjArrayName(Form("MultiIC%sTM%d",particle.Data(),tm));
722      
723     ana->SetNCones(4);
724     ana->SetNPtThresFrac(4);
725     ana->SetConeSizes(0,0.3);       ana->SetConeSizes(1,0.4);
726     ana->SetConeSizes(2,0.5);       ana->SetConeSizes(3,0.6);
727     ana->SetPtThresholds(0, 0.5);   ana->SetPtThresholds(1, 1);     ana->SetPtThresholds(2, 2);
728     ana->SetPtFractions (0, 0.05) ; ana->SetPtFractions (1, 0.1);   ana->SetPtFractions (2, 0.2) ;  ana->SetPtFractions (3, 0.3) ;
729     ana->SetSumPtThresholds(0, 1) ; ana->SetSumPtThresholds(1, 3) ; ana->SetSumPtThresholds(2, 5);  ana->SetSumPtThresholds(3, 7)  ;
730     
731     ana->SwitchOffTMHistoFill();
732     ana->SwitchOffSSHistoFill();
733   }
734   else      
735     ana->SwitchOffSeveralIsolation() ;
736   
737   AliCaloPID* caloPID = ana->GetCaloPID();
738   caloPID->SetEMCALDEtaCut(0.025);
739   caloPID->SetEMCALDPhiCut(0.030);
740   
741   //Set Histograms name tag, bins and ranges
742   
743   if(!multi)ana->AddToHistogramsName(Form("AnaIsol%s_TM%d_",particle.Data(),tm));
744   else      ana->AddToHistogramsName(Form("AnaMultiIsol%s_TM%d_",particle.Data(),tm));
745
746   SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below
747   
748   ana->SetHistoPtInConeRangeAndNBins(0, 50 , 250);
749   ana->SetHistoPtSumRangeAndNBins   (0, 100, 250);
750   
751   if(particle=="Hadron"  || particle.Contains("CTS"))
752   {
753     ana->GetHistogramRanges()->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 200) ;
754     ana->GetHistogramRanges()->SetHistoEtaRangeAndNBins(-1.5, 1.5, 300) ;
755   }
756   
757   ConfigureMC(ana,simulation);
758   
759   if(printSettings) ic ->Print("");
760   if(printSettings) ana->Print("");
761   
762   return ana;
763   
764 }
765
766 //________________________________________________________
767 void ConfigureMC(AliAnaCaloTrackCorrBaseClass* ana,Bool_t simulation = kFALSE)
768 {
769   if(simulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
770   else            ana->SwitchOffDataMC() ;
771
772   //Set here generator name, default pythia
773   //ana->GetMCAnalysisUtils()->SetMCGenerator("");
774 }  
775
776 //________________________________________________________
777 void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges,TString calorimeter = "EMCAL")
778 {
779   // Set common bins for all analysis and MC histograms filling
780     
781   histoRanges->SetHistoPtRangeAndNBins(-0.25, 99.75, 200) ; // Energy and pt histograms
782   
783   if(calorimeter=="EMCAL")
784   {
785     histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
786     histoRanges->SetHistoXRangeAndNBins(-600,90,200); // QA
787     histoRanges->SetHistoYRangeAndNBins(100,450,100); // QA
788
789     histoRanges->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
790   }
791   else
792   {
793     histoRanges->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
794     histoRanges->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
795   }
796   
797   histoRanges->SetHistoShowerShapeRangeAndNBins(-0.1, 4.9, 500);
798   
799   // Invariant mass histoRangeslysis
800   histoRanges->SetHistoMassRangeAndNBins(0., 1., 200) ;
801   histoRanges->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
802   
803   // check if time calibration is on
804   //histoRanges->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
805   histoRanges->SetHistoTimeRangeAndNBins(-400.,400,400);
806   histoRanges->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
807   
808   // track-cluster residuals
809   histoRanges->SetHistoTrackResidualEtaRangeAndNBins(-0.15,0.15,300);
810   histoRanges->SetHistoTrackResidualPhiRangeAndNBins(-0.15,0.15,300);
811   histoRanges->SetHistodRRangeAndNBins(0.,0.15,150);//QA
812
813   // QA, electron, charged
814   histoRanges->SetHistoPOverERangeAndNBins(0,10.,100);
815   histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
816   
817   // QA
818   histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
819   histoRanges->SetHistoRatioRangeAndNBins(0.,2.,100);
820   histoRanges->SetHistoVertexDistRangeAndNBins(0.,500.,500);
821   histoRanges->SetHistoNClusterCellRangeAndNBins(0,500,500);
822   histoRanges->SetHistoZRangeAndNBins(-400,400,200);
823   histoRanges->SetHistoRRangeAndNBins(400,450,25);
824   histoRanges->SetHistoV0SignalRangeAndNBins(0,5000,500);
825   histoRanges->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
826   histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,5000,500);
827   
828 }
829
830 //_________________
831 UInt_t SetTriggerMaskFromName(TString trigger)
832 {
833   if(trigger=="EMC7")
834   {
835     printf("CaloTrackCorr trigger EMC7\n");
836     return AliVEvent::kEMC7;
837   }
838   else if (trigger=="INT7")
839   {
840     printf("CaloTrackCorr trigger INT7\n");
841     return AliVEvent::kINT7;
842   }
843   else if(trigger=="EMC1")
844   {
845     printf("CaloTrackCorr trigger EMC1\n");
846     return AliVEvent::kEMC1;
847   }
848   else if(trigger=="MB")
849   {
850     printf("CaloTrackCorr trigger MB\n");
851     return AliVEvent::kMB;
852   }  
853   else if(trigger=="PHOS")
854   {
855     printf("CaloTrackCorr trigger PHOS\n");
856     return AliVEvent::kPHI7;
857   }  
858   else if(trigger=="PHOSPb")
859   {
860     printf("CaloTrackCorr trigger PHOSPb\n");
861     return AliVEvent::kPHOSPb;
862   }
863   else if(trigger=="AnyINT")
864   {
865     printf("CaloTrackCorr trigger AnyINT\n");
866     return AliVEvent::kAnyINT;
867   }  
868   else if(trigger=="INT")
869   {
870     printf("CaloTrackCorr trigger AnyINT\n");
871     return AliVEvent::kAny;
872   }
873   else if(trigger=="EMCEGA")
874   {
875     printf("CaloTrackCorr trigger EMC Gamma\n");
876     return AliVEvent::kEMCEGA;
877   } 
878   else if(trigger=="EMCEJE")
879   {
880     printf("CaloTrackCorr trigger EMC Jet\n");
881     return AliVEvent::kEMCEJE;
882   }
883   else if(trigger=="Central")
884   {
885     printf("CaloTrackCorr trigger Central\n");
886     return AliVEvent::kCentral;
887   } 
888   else if(trigger=="CentralEGA")
889   {
890     printf("CaloTrackCorr trigger Central+EMCEGA\n");
891     return (AliVEvent::kCentral | AliVEvent::kEMCEGA);
892   } 
893   else if(trigger=="SemiCentral")
894   {
895     printf("CaloTrackCorr trigger SemiCentral\n");
896     return AliVEvent::kSemiCentral;
897   }
898   else if(trigger=="SemiOrCentral")
899   {
900     printf("CaloTrackCorr trigger SemiCentral Or Central\n");
901     return (AliVEvent::kSemiCentral | AliVEvent::kCentral);
902   }  
903   else if(trigger=="SemiOrCentralOrAnyINT")
904     {
905       printf("CaloTrackCorr trigger SemiCentral Or Central Or AnyINT\n");
906       return (AliVEvent::kSemiCentral | AliVEvent::kCentral | AliVEvent::kAnyINT);
907     }
908
909 }
910
911 AliAnaParticleJetFinderCorrelation* ConfigurePhotonJetAnalysis(TString calorimeter = "EMCAL",Float_t gammaConeSize = 0.3, Float_t  jetMinPt  = 0, 
912                                                                Float_t  minDeltaPhi   = 1.5,Float_t  maxDeltaPhi   = 4.5,
913                                                                Float_t  minPtRatio    = 0,Float_t  maxPtRatio    = 5,
914                                                                Bool_t simulation = kFALSE,Int_t debug = -1,Bool_t printSettings = kFALSE){
915
916   AliAnaParticleJetFinderCorrelation *ana = new AliAnaParticleJetFinderCorrelation();
917   ana->SetDebug(debug);
918   TString particle="Photon";
919   ana->SetInputAODName(Form("%s%s",particle.Data(),kGammaJetCorrelationName.Data()));
920
921   ana->SwitchOffFiducialCut();
922
923   ana->SetConeSize(0.4); //was 1 - cone to calculate FF
924   ana->SelectIsolated(kTRUE); // do correlation with isolated photons <<---changed here
925   ana->SetMakeCorrelationInHistoMaker(kFALSE);
926   ana->SetPtThresholdInCone(0.150);//<<---- change here
927   //ana->SetDeltaPhiCutRange(TMath::Pi()/2.,TMath::Pi()*3./2.);//Mostly Open Cuts 
928   ana->SetDeltaPhiCutRange(minDeltaPhi,maxDeltaPhi);  // Delta phi cut for correlation
929   ana->SetJetConeSize(0.4);//jet cone size / check the reco jet name
930   ana->SetJetMinPt(jetMinPt);//min jet pt
931   ana->SetJetAreaFraction(0.8);//min area fraction was 0.6
932   ana->SetMinPt(0.3);//min cluster pt repeated from reader
933   ana->SetGammaConeSize(gammaConeSize);//isolation cone repeated from isolation ana
934   //ana->SetRatioCutRange(0.01,5.); //Mostly Open Cuts //0.01-5//<<---- change here
935   ana->SetRatioCutRange(minPtRatio,maxPtRatio); // Delta pt cut for correlation
936
937   ana->UseJetRefTracks(kTRUE); //Working now
938   //Set Histograms bins and ranges
939   SetHistoRangeAndNBins(ana->GetHistogramRanges(),calorimeter); // see method below 0,100,200
940   //ana->SetHistoPtRangeAndNBins(0, 50, 200) ;
941   //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
942   //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
943
944   //  ana->SwitchOnNonStandardJetFromReader();
945   ana->SwitchOnBackgroundJetFromReader();
946   //background subtraction for photons
947   //ana->SwitchOnBackgroundSubtractionGamma();
948   ana->SwitchOffBackgroundSubtractionGamma();
949
950   ana->SwitchOnSaveGJTree();
951   ana->SwitchOnMostOpposite();
952   //ana->SwitchOnMostEnergetic();
953
954
955   //if(useKinematics) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms
956   if(printSettings) 
957     ana->Print("");
958
959   return ana;
960
961 }