]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/CaloTrackCorrBase/AliAnaCaloTrackCorrBaseClass.cxx
add a common setter to decide if the EMCAL modules under TRD modules have special...
[u/mrichter/AliRoot.git] / PWG / CaloTrackCorrBase / AliAnaCaloTrackCorrBaseClass.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //_________________________________________________________________________
17 // Base class for CaloTrackCorr analysis algorithms
18 //-- Author: Gustavo Conesa (LNF-INFN, LPSC-Grenoble) 
19 //
20 //
21 //_________________________________________________________________________
22
23
24 // --- ROOT system ---
25 #include <TClonesArray.h>
26 //#include <Riostream.h>
27
28 //---- AliRoot system ----
29 #include "AliAnaCaloTrackCorrBaseClass.h"
30 #include "AliCaloTrackReader.h"
31 #include "AliCalorimeterUtils.h"
32 #include "AliCaloPID.h"
33 #include "AliFiducialCut.h"
34 #include "AliIsolationCut.h"
35 #include "AliMCAnalysisUtils.h"
36 #include "AliNeutralMesonSelection.h"
37 #include "AliVCaloCells.h" 
38 #include "AliAODEvent.h"
39 #include "AliAODHandler.h"
40 #include "AliAnalysisManager.h"
41 #include "AliAODPWG4Particle.h"
42
43 ClassImp(AliAnaCaloTrackCorrBaseClass)
44
45
46 //__________________________________________________________
47 AliAnaCaloTrackCorrBaseClass::AliAnaCaloTrackCorrBaseClass() : 
48 TObject(), 
49 fDataMC(0),                   fDebug(0),
50 fCheckFidCut(0),              fCheckRealCaloAcc(0),
51 fCheckCaloPID(0),             fRecalculateCaloPID(0), 
52 fMinPt(0),                    fMaxPt(0),
53 fPairTimeCut(200),            fTRDSMCovered(-1),
54 fMultiBin(0),                 fNZvertBin(0),
55 fNrpBin(0),                   fNCentrBin(0),
56 fNmaxMixEv(0),                fDoOwnMix(0),                   
57 fUseTrackMultBins(0),
58 fMaxMulti(0),                 fMinMulti(0),
59 fUseSelectEvent(kFALSE),      fMakePlots(kFALSE),
60 fInputAODBranch(0x0),         fInputAODName(""),
61 fOutputAODBranch(0x0),        fNewAOD(kFALSE),
62 fOutputAODName(""),           fOutputAODClassName(""),
63 fAODObjArrayName(""),         fAddToHistogramsName(""),
64 fCaloPID(0x0),                fCaloUtils(0x0),
65 fFidCut(0x0),                 fHisto(0x0),
66 fIC(0x0),                     fMCUtils(0x0),                
67 fNMS(0x0),                    fReader(0x0)
68 {
69   //Default Ctor
70   
71   //Initialize parameters
72   InitParameters();
73 }
74
75 //___________________________________________________________
76 AliAnaCaloTrackCorrBaseClass::~AliAnaCaloTrackCorrBaseClass() 
77 {
78   // Remove all pointers except analysis output pointers.
79   
80   //delete fCaloUtils ; //Already deleted in maker
81   //delete fReader ;    //Already deleted in maker
82         
83   delete fCaloPID ; 
84   delete fFidCut  ;  
85   delete fIC      ;      
86   delete fMCUtils ; 
87   delete fNMS     ;     
88   delete fHisto   ;    
89 }
90
91 //______________________________________________________________________
92 void AliAnaCaloTrackCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc)
93 {
94   //Put AOD calo cluster in the AODParticleCorrelation array
95   
96   if(fOutputAODBranch){
97     
98     Int_t i = fOutputAODBranch->GetEntriesFast();
99     //new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
100     if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
101       new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
102     else   if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
103       new((*fOutputAODBranch)[i])  AliAODPWG4ParticleCorrelation(pc);
104     else {
105       printf("AliAnaCaloTrackCorrBaseClass::AddAODParticle() - Cannot add an object of type < %s >, to the AOD TClonesArray \n",  
106              fOutputAODBranch->GetClass()->GetName());
107       abort();    
108     }
109   }
110   else {
111     printf(" AliAnaCaloTrackCorrBaseClass::AddAODParticle() - No AOD branch available!!!\n");
112     abort();
113   }
114   
115 }       
116
117 //__________________________________________________________________________________________
118 Int_t AliAnaCaloTrackCorrBaseClass::CheckMixedEventVertex(Int_t caloLabel, Int_t trackLabel)
119 {
120   // Check vertex in mixed events
121   
122   if (!GetMixedEvent()) return 1; // Not mixed event continue normal processing
123   
124   Int_t evt = -1;
125   
126   if     (caloLabel  >= 0 )
127   {
128     evt = GetMixedEvent()->EventIndexForCaloCluster(caloLabel) ;
129   }
130   else if(trackLabel >= 0 )
131   {
132     evt = GetMixedEvent()->EventIndex(trackLabel) ;
133   }
134   else  
135     return 0; // go to next entry in the particle list
136   
137   if(evt == -1) 
138     return 0 ; // to content coverity
139   
140   if (TMath::Abs(GetVertex(evt)[2]) > GetZvertexCut())  return -1; // Vertex out of range process next event
141   
142   return 1 ; // continue processing normally
143   
144 }
145
146 //________________________________________________________________
147 void AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() 
148 {
149   //Recover ouput and input AOD pointers for each event in the maker
150         
151   //Delta AODs
152   if(fDebug > 3) printf("AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Connect Input with name: <%s>; Connect output with name <%s>\n",fInputAODName.Data(),fOutputAODName.Data());
153   
154   //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
155   AliAODHandler* aodHandler = 0x0;
156   Bool_t outAOD = kFALSE;
157   if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
158   if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
159   else       aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
160   
161   if(!GetReader()->WriteDeltaAODToFile())
162   {
163     fOutputAODBranch =  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fOutputAODName);
164     fInputAODBranch  =  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fInputAODName);      
165   }
166   else if (aodHandler->GetExtensions()) { 
167     
168     AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
169     if(ext){
170       AliAODEvent *aodEvent = ext->GetAOD(); 
171       if(fNewAOD)fOutputAODBranch = (TClonesArray*) aodEvent->FindListObject(fOutputAODName);
172       fInputAODBranch = (TClonesArray*) aodEvent->FindListObject(fInputAODName);          
173       if(!fOutputAODBranch && fNewAOD) fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
174       if(!fInputAODBranch)  fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
175     }
176     else{//If no Delta AODs, kept in standard branch, to revise. 
177       if(fNewAOD && fReader->GetOutputEvent()) {
178         fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
179         fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);  
180       }
181       else {
182         fInputAODBranch  =  (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName);   
183         if(!fInputAODBranch && fReader->GetOutputEvent() ) 
184           fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
185       }
186     }
187   }
188   else{ //If no Delta AODs, kept in standard branch
189     if(fNewAOD && fReader->GetOutputEvent()) {
190       fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
191       fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);    
192     }
193     else{ 
194       fInputAODBranch  =  (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName);
195       if(!fInputAODBranch && fReader->GetOutputEvent())  
196         fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
197     }
198   }
199   
200   if(GetDebug() > 1){
201     if(fNewAOD && !fOutputAODBranch) 
202       printf(" AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Output Branch <%s>, not found!\n",fOutputAODName.Data());
203     if(!fNewAOD && !fInputAODBranch) 
204       printf(" AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Input Branch  <%s>, not found!\n",fInputAODName.Data());
205   }
206 }
207
208 //_____________________________________________________________________________________
209 AliVCluster * AliAnaCaloTrackCorrBaseClass::FindCluster(TObjArray* clusters, Int_t id,
210                                                         Int_t & iclus, Int_t first)
211 {
212   // Given the cluster ID stored in AliAODPWG4Particle, get the originator cluster and its index in the array
213   
214   if(!clusters) return 0x0;
215   
216   for(iclus = first; iclus < clusters->GetEntriesFast(); iclus++){
217     AliVCluster *cluster= dynamic_cast<AliVCluster*> (clusters->At(iclus));
218     if(cluster){
219       if     (cluster->GetID()==id) {
220         return cluster;
221       }
222     }      
223   }// calorimeter clusters loop
224   
225   return 0x0;
226   
227 }
228
229 //______________________________________________________________________________
230 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetAODBranch(TString aodName) const 
231 {
232         //Recover ouput and input AOD pointers for each event in the maker
233         
234         //Delta AODs
235         if(fDebug > 3) printf("AliAnaCaloTrackCorrBaseClass::GetAODBranch() - Get Input Branch with name: <%s>; \n",aodName.Data());
236         
237   //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
238   AliAODHandler* aodHandler = 0x0;
239   Bool_t outAOD = kFALSE;
240   if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
241   if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
242   else       aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
243   
244   if(!GetReader()->WriteDeltaAODToFile())
245   {
246     return  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(aodName);
247   }
248   else if (aodHandler->GetExtensions())
249   { 
250     AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
251     if(ext){
252       AliAODEvent *aodEvent = ext->GetAOD(); 
253       TClonesArray * aodbranch =  (TClonesArray*) aodEvent->FindListObject(aodName);
254       if(aodbranch) return aodbranch;
255       else {
256         if(outAOD) return  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
257         else       return  (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
258       }
259     }
260     else{//If no Delta AODs, kept in standard branch, to revise. 
261       if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
262       else       return (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
263     }
264   }
265   else{ //If no Delta AODs, kept in standard branch, to revise. 
266     if(outAOD) return (TClonesArray *)  fReader->GetOutputEvent()->FindListObject(aodName);
267     else       return  (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
268   }
269   
270 }
271
272 //_____________________________________________________________
273 TObjArray *  AliAnaCaloTrackCorrBaseClass::GetCTSTracks() const 
274 {
275   //Get list of referenced tracks from reader
276   
277   return fReader->GetCTSTracks(); 
278   
279 }
280
281 //________________________________________________________________
282 TObjArray *  AliAnaCaloTrackCorrBaseClass::GetPHOSClusters() const 
283 {
284   //Get list of PHOS reference caloclusters from reader
285   
286   return fReader->GetPHOSClusters(); 
287   
288 }
289
290 //_________________________________________________________________
291 TObjArray *  AliAnaCaloTrackCorrBaseClass::GetEMCALClusters() const 
292 {
293   //Get list of emcal referenced caloclusters from reader
294   
295   return fReader->GetEMCALClusters(); 
296   
297 }
298
299 //______________________________________________________________________
300 TClonesArray *  AliAnaCaloTrackCorrBaseClass::GetAODCaloClusters() const 
301 {
302   //Get list of all caloclusters in AOD output file 
303   
304   return fReader->GetOutputEvent()->GetCaloClusters(); 
305   
306 }
307
308 //________________________________________________________________
309 TClonesArray *  AliAnaCaloTrackCorrBaseClass::GetAODTracks() const 
310 {
311   //Get list of all tracks in AOD output file 
312   
313   return fReader->GetOutputEvent()->GetTracks(); 
314   
315 }
316
317 //____________________________________________________________
318 TString  AliAnaCaloTrackCorrBaseClass::GetBaseParametersList()  
319 {
320   //Put data member values in string to keep in output container
321   
322   TString parList ; //this will be list of parameters used for this analysis.
323   const Int_t buffersize = 255;
324   char onePar[buffersize] ;
325   snprintf(onePar,buffersize,"--- AliAnaCaloTrackCorrBaseClass ---\n") ;
326   parList+=onePar ;     
327   snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
328   parList+=onePar ;
329   snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
330   parList+=onePar ;
331   snprintf(onePar,buffersize,"|t_{1}-t_{2}| < %2.2f ; Max\n", fPairTimeCut) ;
332   parList+=onePar ;
333   snprintf(onePar,buffersize,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
334   parList+=onePar ;
335   snprintf(onePar,buffersize,"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",fCheckFidCut) ;
336   parList+=onePar ;
337   snprintf(onePar,buffersize,"fCheckRealCaloAcc=%d (Check Real Calo Acceptance on/off) \n",fCheckRealCaloAcc) ;
338   parList+=onePar ;
339   snprintf(onePar,buffersize,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
340   parList+=onePar ;
341   snprintf(onePar,buffersize,"fRecalculateCaloPID  =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
342   parList+=onePar ;
343   snprintf(onePar,buffersize,"fInputAODName  =%s Input AOD name \n",fInputAODName.Data()) ;
344   parList+=onePar ;     
345   if(fNewAOD){
346     snprintf(onePar,buffersize,"fOutputAODName  =%s Output AOD name \n",fOutputAODName.Data()) ;
347     parList+=onePar ;   
348     snprintf(onePar,buffersize,"fOutputAODClassName  =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
349     parList+=onePar ;   
350   }
351   snprintf(onePar,buffersize,"fAODObjArrayName  =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ;
352   parList+=onePar ;     
353   snprintf(onePar,buffersize,"fAddToHistogramsName  =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
354   parList+=onePar ;     
355         
356   return parList; 
357   
358 }
359
360 //_____________________________________________________________________
361 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetCreateOutputAODBranch() 
362 {
363   //Create AOD branch filled in the analysis
364   
365   printf("Create AOD branch of %s objects and with name < %s >\n",
366          fOutputAODClassName.Data(),fOutputAODName.Data()) ;
367   
368   TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
369   aodBranch->SetName(fOutputAODName);
370   return aodBranch ;
371   
372 }
373
374 //________________________________________________________
375 Int_t AliAnaCaloTrackCorrBaseClass::GetEventNumber() const 
376 {
377   //Get current event number
378   
379   return fReader->GetEventNumber() ; 
380   
381 }
382
383
384 //__________________________________________________________
385 AliStack *  AliAnaCaloTrackCorrBaseClass::GetMCStack() const 
386 {
387   //Get stack pointer from reader
388   
389   return fReader->GetStack(); 
390   
391 }
392 //____________________________________________________________
393 AliHeader *  AliAnaCaloTrackCorrBaseClass::GetMCHeader() const
394 {
395   //Get header pointer from reader
396   
397   return fReader->GetHeader(); 
398   
399 }
400
401 //____________________________________________________________________________
402 AliGenEventHeader *  AliAnaCaloTrackCorrBaseClass::GetMCGenEventHeader() const
403 {
404   //Get GenEventHeader pointer from reader
405   
406   return fReader->GetGenEventHeader(); 
407   
408 }
409
410
411 //________________________________________________________________
412 Int_t AliAnaCaloTrackCorrBaseClass::GetEventCentralityBin() const
413 {
414   // Define the centrality bin for mixing
415   // In pp collisions analysis hardcoded track multiplicities
416   
417   Int_t curCentrBin = 0;
418   
419   if(fUseTrackMultBins) // pp collisions
420   { // Track multiplicity bins
421     //curCentrBin = (GetTrackMultiplicity()-1)/5; 
422     //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
423     Int_t trackMult = GetReader()->GetTrackMultiplicity();
424     if(trackMult<=5)
425       curCentrBin=8;
426     else if(trackMult<=10)
427       curCentrBin=7;
428     else if(trackMult<=15)
429       curCentrBin=6;
430     else if(trackMult<=20)
431       curCentrBin=5;
432     else if(trackMult<=30)
433       curCentrBin=4;
434     else if(trackMult<=40)
435       curCentrBin=3;
436     else if(trackMult<=55)
437       curCentrBin=2;
438     else if(trackMult<=70)
439       curCentrBin=1 ;
440     else curCentrBin=0 ;        
441   }
442   else // Set centrality based on centrality task, PbPb collisions
443   {
444     Float_t minCent = GetReader()->GetCentralityBin(0);
445     Float_t maxCent = GetReader()->GetCentralityBin(1);
446     
447     if((minCent< 0 && maxCent< 0) || minCent>=maxCent)
448     {
449       curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
450       if(curCentrBin==GetNCentrBin())
451       {
452         curCentrBin = GetNCentrBin()-1;
453         printf("AliAnaCaloTrackCorrBaseClass::GetEventCentralityBin() - Centrality = %d, put it in last bin \n",GetEventCentrality());
454       }
455     }
456     else
457     {
458       curCentrBin = (Int_t)((GetEventCentrality()-minCent) * GetNCentrBin() / (maxCent-minCent)); 
459       if(curCentrBin==GetNCentrBin()) curCentrBin = GetNCentrBin()-1;
460     }  
461     
462     if(GetDebug() > 0 )
463       printf("AliAnaCaloTrackCorrBaseClass::GetEventCentralityBin() - %d, centrality %d, n bins %d, max bin from centrality %d\n",
464              curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt());        
465   }  
466   
467   return curCentrBin;
468   
469 }
470
471 //_______________________________________________________
472 Int_t AliAnaCaloTrackCorrBaseClass::GetEventRPBin() const
473 {
474   //Reaction plane bin
475   
476   Int_t curRPBin  = 0 ;
477   
478   if(GetNRPBin() > 1 && GetEventPlane())
479   {
480     Float_t epAngle = GetEventPlaneAngle();//->GetEventplane(GetEventPlaneMethod(),fReader->GetInputEvent());
481     
482     if(epAngle < 0 || epAngle >TMath::Pi())
483     { 
484       printf("AliAnaCaloTrackCorrBaseClass::GetEventRPBin() - Wrong event plane angle : %f \n",epAngle);
485       return -1;
486     }
487     
488     curRPBin = TMath::Nint(epAngle*(GetNRPBin()-1)/TMath::Pi());
489     if(curRPBin >= GetNRPBin()) printf("RP Bin %d out of range %d\n",curRPBin,GetNRPBin());
490     
491     if(GetDebug() > 0 )
492       printf("AliAnaCaloTrackCorrBaseClass::GetEventRPBin() - %d, bin float %f, angle %f, n bins %d\n", 
493              curRPBin,epAngle*(GetNRPBin()-1)/TMath::Pi(),epAngle,GetNRPBin());
494   }  
495   
496   return curRPBin ;
497   
498 }
499
500 //_______________________________________________________
501 Int_t AliAnaCaloTrackCorrBaseClass::GetEventVzBin() const
502 {
503   // Return Vz bin, divide vertex in GetNZvertBin() bins, 
504   // depending on the vertex cut
505   
506   Double_t v[3] = {0,0,0}; //vertex 
507   GetReader()->GetVertex(v);
508   
509   Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut());
510   
511   if(GetDebug() > 0 )
512     printf("AliAnaCaloTrackCorrBaseClass::GetEventVzBin() - %d, vz %2.2f, n bins %d \n",
513            curZvertBin, v[2], GetNZvertBin()); 
514   
515   return curZvertBin;
516 }
517
518 //________________________________________________________________________________________
519 Int_t AliAnaCaloTrackCorrBaseClass::GetEventMixBin(Int_t iCen, Int_t iVz, Int_t iRP) const
520 {
521   // Event mixing bin, combination of vz, centrality and reaction plane bins
522   
523   if(iCen<0 || iVz < 0 || iRP < 0)
524     return -1;
525   else
526     return iCen*GetNZvertBin()*GetNRPBin()+iVz*GetNRPBin()+iRP;
527 }
528
529 //________________________________________________________
530 Int_t AliAnaCaloTrackCorrBaseClass::GetEventMixBin() const
531 {
532   // Event mixing bin, combination of vz, centrality and reaction plane bins
533   
534   //Get vertex z bin
535   Int_t iVz =  GetEventVzBin();
536   
537   // centrality (PbPb) or tracks multiplicity (pp) bin
538   Int_t iCen = GetEventCentralityBin();
539   
540   // reaction plane bin (PbPb)
541   Int_t iRP = GetEventRPBin();  
542   
543   Int_t eventBin = GetEventMixBin(iCen, iVz, iRP);
544   
545   if(GetDebug() > 0)
546     printf("AliAnaCaloTrackCorrBaseClass::GetEventMixBin() - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
547            iCen,iVz, iRP, eventBin, GetNZvertBin()*GetNRPBin()*GetNCentrBin());
548   
549   return eventBin;
550   
551 }
552
553 //_________________________________________________
554 void AliAnaCaloTrackCorrBaseClass::InitParameters()
555
556   //Initialize the parameters of the analysis.
557   fDataMC              = kFALSE;
558   fDebug               = -1;
559   fCheckCaloPID        = kTRUE ;
560   fCheckFidCut         = kFALSE ;
561   fCheckRealCaloAcc    = kFALSE ;
562   fRecalculateCaloPID  = kFALSE ;
563   fMinPt               = 0.2  ; //Min pt in particle analysis
564   fMaxPt               = 300. ; //Max pt in particle analysis
565   fMultiBin            = 1;
566   fNZvertBin           = 1;
567   fNrpBin              = 1;
568   fMaxMulti            = 1000;
569   fMinMulti            = 0;
570   fUseSelectEvent      = kFALSE ;
571   
572   //fReader    = new AliCaloTrackReader(); //Initialized in maker
573   //fCaloUtils = new AliCalorimeterUtils();//Initialized in maker
574   
575   fNewAOD              = kFALSE ;
576   fOutputAODName       = "CaloTrackCorr";
577   fOutputAODClassName  = "AliAODPWG4Particle";
578   fInputAODName        = "CaloTrackCorr";
579   fAddToHistogramsName = "";
580   fAODObjArrayName     = "Ref";
581   
582 }
583
584 //__________________________________________________________________
585 void AliAnaCaloTrackCorrBaseClass::Print(const Option_t * opt) const
586 {
587   //Print some relevant parameters set for the analysis
588   
589   if(! opt)
590     return;
591         
592   printf("New AOD:            =     %d\n",      fNewAOD);
593   printf("Input AOD name:     =     %s\n",      fInputAODName.Data());
594   printf("Output AOD name:    =     %s\n",      fOutputAODName.Data());
595   printf("Output AOD Class name: =  %s\n",      fOutputAODClassName.Data());
596   printf("Name of reference array      : %s\n", fAODObjArrayName.Data());
597   printf("String added histograms name : %s\n", fAddToHistogramsName.Data());
598
599   printf("Min Photon pT       =     %2.2f\n", fMinPt) ;
600   printf("Max Photon pT       =     %3.2f\n", fMaxPt) ;
601   printf("Check PID           =     %d\n",    fCheckCaloPID) ;
602   printf("Recalculate PID     =     %d\n",    fRecalculateCaloPID) ;
603   printf("Check Fiducial cut  =     %d\n",    fCheckFidCut) ;
604   printf("Check Real Calo Acc =     %d\n",    fCheckRealCaloAcc) ;
605   printf("Check MC labels     =     %d\n",    fDataMC);
606   printf("Make plots?         =     %d\n",    fMakePlots);
607   printf("Debug Level         =     %d\n",    fDebug);
608   
609   printf("    \n") ;
610   
611
612
613
614