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