Correct and clean the vertex retrieval in case of SE or ME analysis
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliAnaPartCorrBaseClass.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 /* $Id: $ */
16
17 //_________________________________________________________________________
18 // Base class for analysis algorithms
19 //-- Author: Gustavo Conesa (LNF-INFN) 
20 //_________________________________________________________________________
21   
22
23 // --- ROOT system ---
24 #include <TClonesArray.h>
25 //#include <Riostream.h>
26
27 //---- AliRoot system ----
28 #include "AliAnaPartCorrBaseClass.h"
29 #include "AliCaloTrackReader.h"
30 #include "AliCalorimeterUtils.h"
31 #include "AliCaloPID.h"
32 #include "AliFiducialCut.h"
33 #include "AliIsolationCut.h"
34 #include "AliMCAnalysisUtils.h"
35 #include "AliNeutralMesonSelection.h"
36 #include "AliVCaloCells.h" 
37 #include "AliAODEvent.h"
38 #include "AliAODHandler.h"
39 #include "AliAnalysisManager.h"
40 #include "AliAODPWG4Particle.h"
41
42 ClassImp(AliAnaPartCorrBaseClass)
43   
44   
45 //_______________________________________________
46   AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass() : 
47     TObject(), fDataMC(0), fDebug(0), fCheckFidCut(0),
48     fCheckCaloPID(0), fRecalculateCaloPID(0), fMinPt(0), fMaxPt(0),
49     fReader(0x0), fInputAODBranch(0x0), fInputAODName(""),
50     fOutputAODBranch(0x0), fNewAOD(kFALSE),
51     fOutputAODName(""), fOutputAODClassName(""),
52     fAODObjArrayName(""), fAddToHistogramsName(""),
53     fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fMCUtils(0x0), fNMS(0x0),
54     fCaloUtils(0x0),
55     fHistoPtBins(0),   fHistoPtMax(0.),   fHistoPtMin(0.),
56     fHistoPhiBins(0),  fHistoPhiMax(0.),  fHistoPhiMin(0.),
57     fHistoEtaBins(0),  fHistoEtaMax(0.),  fHistoEtaMin(0.),
58     fHistoMassBins(0), fHistoMassMax(0.), fHistoMassMin(0.),
59     fHistoAsymBins(0), fHistoAsymMax(0.), fHistoAsymMin(0.)
60 {
61   //Default Ctor
62     
63   //Initialize parameters
64   InitParameters();
65 }
66 /*
67 //___________________________________________________________
68 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & abc) :   
69   TObject(), fDataMC(abc.fDataMC), fDebug(abc.fDebug),
70   fCheckFidCut(abc.fCheckFidCut),  fCheckCaloPID(abc. fCheckCaloPID),
71   fRecalculateCaloPID(abc.fRecalculateCaloPID),
72   fMinPt(abc.fMinPt), fMaxPt(abc.fMaxPt), fReader(new AliCaloTrackReader(*abc.fReader)),  
73   fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName),
74   fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD), 
75   fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName),
76   fAODObjArrayName(abc.fAODObjArrayName),
77   fAddToHistogramsName(abc.fAddToHistogramsName),
78   fCaloPID(new AliCaloPID(*abc.fCaloPID)), fFidCut(new AliFiducialCut(*abc.fFidCut)), fIC(new AliIsolationCut(*abc.fIC)),
79   fMCUtils(new AliMCAnalysisUtils(*abc.fMCUtils)), fNMS(new AliNeutralMesonSelection(*abc.fNMS)),
80   fCaloUtils(new AliCalorimeterUtils(*abc.fCaloUtils)),
81   fHistoPtBins(abc.fHistoPtBins),     fHistoPtMax(abc.fHistoPtMax),     fHistoPtMin(abc.fHistoPtMin),
82   fHistoPhiBins(abc.fHistoPhiBins),   fHistoPhiMax(abc.fHistoPhiMax),   fHistoPhiMin(abc.fHistoPhiMin),
83   fHistoEtaBins(abc.fHistoEtaBins),   fHistoEtaMax(abc.fHistoEtaMax),   fHistoEtaMin(abc.fHistoEtaMin),
84   fHistoMassBins(abc.fHistoMassBins), fHistoMassMax(abc.fHistoMassMax), fHistoMassMin(abc.fHistoMassMin),
85   fHistoAsymBins(abc.fHistoAsymBins), fHistoAsymMax(abc.fHistoAsymMax), fHistoAsymMin(abc.fHistoAsymMin)
86 {
87   // cpy ctor
88
89 }
90 */
91   /*
92 //_________________________________________________________________________
93 AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartCorrBaseClass & abc)
94 {
95   // assignment operator
96   
97   if(this == &abc) return *this;
98   ((TObject *)this)->operator=(abc);
99   
100   fDataMC             = abc.fDataMC;
101   fDebug              = abc.fDebug ;
102   fRecalculateCaloPID = abc.fRecalculateCaloPID ;
103   fCheckCaloPID       = abc.fCheckCaloPID ;
104   fCheckFidCut        = abc.fCheckFidCut ; 
105         
106   fMinPt   = abc.fMinPt;
107   fMaxPt   = abc.fMaxPt;
108         
109   delete fCaloPID;   fCaloPID   = new AliCaloPID        (*abc.fCaloPID);
110   delete fFidCut;    fFidCut    = new AliFiducialCut    (*abc.fFidCut);
111   delete fMCUtils;   fMCUtils   = new AliMCAnalysisUtils(*abc.fMCUtils);
112   delete fIC;        fIC        = new AliIsolationCut   (*abc.fIC);
113   delete fNMS;       fNMS       = new AliNeutralMesonSelection(*abc.fNMS);
114   delete fCaloUtils; fCaloUtils = new AliCalorimeterUtils(*abc.fCaloUtils);
115   delete fReader;    fReader    = new AliCaloTrackReader(*abc.fReader) ;
116         
117   delete fInputAODBranch;  fInputAODBranch      = new TClonesArray(*abc.fInputAODBranch) ;
118   fInputAODName        = abc.fInputAODName;
119   delete fOutputAODBranch; fOutputAODBranch     = new TClonesArray(*abc.fOutputAODBranch) ;
120   fNewAOD              = abc.fNewAOD ; 
121   fOutputAODName       = abc.fOutputAODName; 
122   fOutputAODClassName  = abc.fOutputAODClassName;
123   fAddToHistogramsName = abc.fAddToHistogramsName;
124   fAODObjArrayName     = abc.fAODObjArrayName;
125
126   fHistoPtBins  = abc.fHistoPtBins;  fHistoPtMax  = abc.fHistoPtMax;  fHistoPtMin  = abc.fHistoPtMin;
127   fHistoPhiBins = abc.fHistoPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin;
128   fHistoEtaBins = abc.fHistoEtaBins; fHistoEtaMax = abc.fHistoEtaMax; fHistoEtaMin = abc.fHistoEtaMin;
129   
130   return *this;
131   
132 }
133   */
134 //____________________________________________________________________________
135 AliAnaPartCorrBaseClass::~AliAnaPartCorrBaseClass() 
136 {
137   // Remove all pointers except analysis output pointers.
138 //printf("---Delete analysis %s\n", fAODObjArrayName.Data());
139   // Not sure if it should be me who deletes the delta AOD branches.
140 //  if(fOutputAODBranch){
141 //    fOutputAODBranch->Clear() ; 
142 //    delete fOutputAODBranch ;
143 //  }
144 //  
145 //  if(fInputAODBranch){
146 //    fInputAODBranch->Clear() ; 
147 //    delete fInputAODBranch ;
148 //  }
149   
150   //if(fCaloUtils)    delete fCaloUtils ; //Already deleted in maker
151   //if(fReader)       delete fReader ;    //Already deleted in maker
152         
153   if(fCaloPID)   delete fCaloPID ;
154   if(fFidCut)    delete fFidCut ;
155   if(fIC)        delete fIC ;
156   if(fMCUtils)   delete fMCUtils ;
157   if(fNMS)       delete fNMS ;
158   
159 //   printf("--- analysis deleted \n");
160 }
161
162 //____________________________________________________________________________
163 void AliAnaPartCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc) {
164   //Put AOD calo cluster in the AODParticleCorrelation array
165   
166   if(fOutputAODBranch){
167     
168     Int_t i = fOutputAODBranch->GetEntriesFast();
169     //new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
170     if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
171       new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
172     else   if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
173       new((*fOutputAODBranch)[i])  AliAODPWG4ParticleCorrelation(pc);
174     else {
175       printf("AliAnaPartCorrBaseClass::AddAODParticle() - Cannot add an object of type < %s >, to the AOD TClonesArray \n",  
176              fOutputAODBranch->GetClass()->GetName());
177       abort();    
178     }
179   }
180   else {
181     printf(" AliAnaPartCorrBaseClass::AddAODParticle() - No AOD branch available!!!\n");
182     abort();
183   }
184
185 }       
186
187 //___________________________________________________________________________
188 TClonesArray * AliAnaPartCorrBaseClass::GetAODBranch(TString aodName) const {
189         //Recover ouput and input AOD pointers for each event in the maker
190         
191         //Delta AODs
192         if(fDebug > 3) printf("AliAnaPartCorrBaseClass::GetAODBranch() - Get Input Branch with name: <%s>; \n",aodName.Data());
193         
194   //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
195   AliAODHandler* aodHandler = 0x0;
196   Bool_t outAOD = kFALSE;
197   if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
198   if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
199   else       aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
200   
201   if(!GetReader()->WriteDeltaAODToFile())
202   {
203     return  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(aodName);
204   }
205   else if (aodHandler->GetExtensions())
206   { 
207     AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
208     if(ext){
209       AliAODEvent *aodEvent = ext->GetAOD(); 
210       TClonesArray * aodbranch =  (TClonesArray*) aodEvent->FindListObject(aodName);
211       if(aodbranch) return aodbranch;
212       else {
213         if(outAOD) return  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
214         else       return  (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
215       }
216     }
217     else{//If no Delta AODs, kept in standard branch, to revise. 
218       if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
219       else       return (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
220     }
221   }
222   else{ //If no Delta AODs, kept in standard branch, to revise. 
223     if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
224     else       return  (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
225   }
226   
227 }
228
229
230
231 //___________________________________________________
232 void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() {
233   //Recover ouput and input AOD pointers for each event in the maker
234         
235   //Delta AODs
236   if(fDebug > 3) printf("AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() - Connect Input with name: <%s>; Connect output with name <%s>\n",fInputAODName.Data(),fOutputAODName.Data());
237   
238         //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
239         AliAODHandler* aodHandler = 0x0;
240         Bool_t outAOD = kFALSE;
241         if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
242         if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
243         else         aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
244         
245   if(!GetReader()->WriteDeltaAODToFile())
246   {
247     fOutputAODBranch =  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fOutputAODName);
248     fInputAODBranch  =  (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fInputAODName);      
249   }
250   else if (aodHandler->GetExtensions()) { 
251     
252           AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
253           if(ext){
254       AliAODEvent *aodEvent = ext->GetAOD(); 
255       if(fNewAOD)fOutputAODBranch = (TClonesArray*) aodEvent->FindListObject(fOutputAODName);
256       fInputAODBranch = (TClonesArray*) aodEvent->FindListObject(fInputAODName);          
257       if(!fOutputAODBranch && fNewAOD) fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
258       if(!fInputAODBranch)  fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
259           }
260           else{//If no Delta AODs, kept in standard branch, to revise. 
261                   if(fNewAOD && fReader->GetOutputEvent()) {
262                           fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
263                           fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);        
264                   }
265                   else {
266                           fInputAODBranch  =  (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName); 
267                           if(!fInputAODBranch && fReader->GetOutputEvent() ) 
268                                   fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
269                   }
270           }
271   }
272   else{ //If no Delta AODs, kept in standard branch
273           if(fNewAOD && fReader->GetOutputEvent()) {
274                   fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
275                   fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);        
276           }
277           else{ 
278                   fInputAODBranch  =  (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName);
279                   if(!fInputAODBranch && fReader->GetOutputEvent())  
280                           fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
281           }
282   }
283         
284   if(GetDebug() > 1){
285     if(fNewAOD && !fOutputAODBranch) 
286       printf(" AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() - Output Branch <%s>, not found!\n",fOutputAODName.Data());
287     if(!fNewAOD && !fInputAODBranch) 
288       printf(" AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() - Input Branch  <%s>, not found!\n",fInputAODName.Data());
289   }
290 }
291 //
292 ////__________________________________________________________________________
293 //Bool_t AliAnaPartCorrBaseClass::IsTrackMatched(AliVCluster* cluster) const {
294 //  //Check if there is any track attached to this cluster
295 //  
296 //  Int_t nMatches = cluster->GetNTracksMatched();
297 ////  printf("N matches %d, first match %d\n",nMatches,cluster->GetTrackMatchedIndex());
298 ////  if     (cluster->GetTrackMatched(0))        printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0))->GetID()) ;
299 ////  else if(cluster->GetTrackMatchedIndex()>=0) printf("\t matched track id %d\n",((AliVTrack*) GetReader()->GetInputEvent()->GetTrack(cluster->GetTrackMatchedIndex()))->GetID()) ;
300 //
301 //  if(fReader->GetDataType()==AliCaloTrackReader::kESD)
302 //  {
303 //    
304 //    if (nMatches > 0) {
305 //      if (nMatches == 1 ) {
306 //        Int_t iESDtrack = cluster->GetTrackMatchedIndex();
307 //        //printf("Track Matched index %d\n",iESDtrack);
308 //        if(iESDtrack==-1) return kFALSE ;// Default value of array, there is no match
309 //        else              return kTRUE;
310 //      }//Just one, check
311 //      else return kTRUE ;//More than one, there is a match.
312 //    }// > 0
313 //    else return kFALSE; //It does not happen, but in case
314 //      
315 //  }//ESDs
316 //  else
317 //  {
318 //    //AODs
319 //    if(nMatches > 0) return kTRUE; //There is at least one match.
320 //    else             return kFALSE;
321 //    
322 //  }//AODs or MC (copy into AOD)
323 //  
324 //  return kFALSE;
325 //  
326 //}
327 //
328 //__________________________________________________
329 TObjArray *  AliAnaPartCorrBaseClass::GetAODCTS() const {
330   //Get list of referenced tracks from reader
331
332   return fReader->GetAODCTS(); 
333
334 }
335
336 //__________________________________________________
337 TObjArray *  AliAnaPartCorrBaseClass::GetAODPHOS() const {
338   //Get list of PHOS reference caloclusters from reader
339
340   return fReader->GetAODPHOS(); 
341
342 }
343
344 //__________________________________________________
345 TObjArray *  AliAnaPartCorrBaseClass::GetAODEMCAL() const {
346   //Get list of emcal referenced caloclusters from reader
347
348   return fReader->GetAODEMCAL(); 
349
350 }
351
352 //__________________________________________________
353 TClonesArray *  AliAnaPartCorrBaseClass::GetAODCaloClusters() const {
354   //Get list of all caloclusters in AOD output file 
355
356   return fReader->GetOutputEvent()->GetCaloClusters(); 
357
358 }
359
360 //__________________________________________________
361 TClonesArray *  AliAnaPartCorrBaseClass::GetAODTracks() const {
362   //Get list of all tracks in AOD output file 
363
364   return fReader->GetOutputEvent()->GetTracks(); 
365
366 }
367
368 //__________________________________________________
369 TString  AliAnaPartCorrBaseClass::GetBaseParametersList()  {
370   //Put data member values in string to keep in output container
371
372   TString parList ; //this will be list of parameters used for this analysis.
373   const Int_t buffersize = 255;
374   char onePar[buffersize] ;
375   snprintf(onePar,buffersize,"--- AliAnaPartCorrBaseClass ---\n") ;
376   parList+=onePar ;     
377   snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
378   parList+=onePar ;
379   snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
380   parList+=onePar ;
381   snprintf(onePar,buffersize,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
382   parList+=onePar ;
383   snprintf(onePar,buffersize,"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",fCheckFidCut) ;
384   parList+=onePar ;
385   snprintf(onePar,buffersize,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
386   parList+=onePar ;
387   snprintf(onePar,buffersize,"fRecalculateCaloPID  =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
388   parList+=onePar ;
389   snprintf(onePar,buffersize,"fInputAODName  =%s Input AOD name \n",fInputAODName.Data()) ;
390   parList+=onePar ;     
391   if(fNewAOD){
392      snprintf(onePar,buffersize,"fOutputAODName  =%s Output AOD name \n",fOutputAODName.Data()) ;
393      parList+=onePar ;  
394      snprintf(onePar,buffersize,"fOutputAODClassName  =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
395      parList+=onePar ;  
396   }
397   snprintf(onePar,buffersize,"fAODObjArrayName  =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ;
398   parList+=onePar ;     
399   snprintf(onePar,buffersize,"fAddToHistogramsName  =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
400   parList+=onePar ;     
401         
402   return parList; 
403
404 }
405
406 //__________________________________________________
407  TClonesArray * AliAnaPartCorrBaseClass::GetCreateOutputAODBranch() {
408    //Create AOD branch filled in the analysis
409    
410    printf("Create AOD branch of %s objects and with name < %s >\n",
411           fOutputAODClassName.Data(),fOutputAODName.Data()) ;
412    
413    TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
414    aodBranch->SetName(fOutputAODName);
415    return aodBranch ;
416    
417  }
418
419 //__________________________________________________
420 Int_t AliAnaPartCorrBaseClass::GetEventNumber() const {
421         //Get current event number
422         
423         return fReader->GetEventNumber() ; 
424 }
425         
426 //__________________________________________________
427 AliStack *  AliAnaPartCorrBaseClass::GetMCStack() const {
428   //Get stack pointer from reader
429
430   return fReader->GetStack(); 
431
432 }
433 //__________________________________________________
434 AliHeader *  AliAnaPartCorrBaseClass::GetMCHeader() const {
435   //Get header pointer from reader
436
437   return fReader->GetHeader(); 
438
439 }
440
441 //__________________________________________________
442 AliGenEventHeader *  AliAnaPartCorrBaseClass::GetMCGenEventHeader() const {
443   //Get GenEventHeader pointer from reader
444
445   return fReader->GetGenEventHeader(); 
446
447 }
448
449 //__________________________________________________
450 void AliAnaPartCorrBaseClass::InitParameters()
451
452   //Initialize the parameters of the analysis.
453   fDataMC = kFALSE;
454   fDebug = -1;
455   fCheckCaloPID = kTRUE ;
456   fCheckFidCut = kFALSE ;
457   fRecalculateCaloPID = kFALSE ;
458   fMinPt = 0.1  ; //Min pt in particle analysis
459   fMaxPt = 300. ; //Max pt in particle analysis
460
461   //fReader    = new AliCaloTrackReader(); //Initialized in maker
462   //fCaloUtils = new AliCalorimeterUtils();//Initialized in maker
463         
464   fNewAOD              = kFALSE ;
465   fOutputAODName       = "PartCorr";
466   fOutputAODClassName  = "AliAODPWG4Particle";
467   fInputAODName        = "PartCorr";
468   fAddToHistogramsName = "";
469   fAODObjArrayName     = "Ref";
470           
471   //Histogram settings
472   fHistoPtBins    = 240 ;
473   fHistoPtMax     = 120 ;
474   fHistoPtMin     = 0.  ;
475
476   fHistoPhiBins   = 120 ;
477   fHistoPhiMax    = TMath::TwoPi();
478   fHistoPhiMin    = 0.  ;
479
480   fHistoEtaBins   = 100 ;
481   fHistoEtaMax    =  1  ;
482   fHistoEtaMin    = -1  ;
483
484   fHistoMassBins  = 200;
485   fHistoMassMax   = 1. ;
486   fHistoMassMin   = 0. ;
487         
488   fHistoAsymBins  = 10 ;
489   fHistoAsymMax   = 1. ;
490   fHistoAsymMin   = 0. ;
491         
492 }
493
494 //__________________________________________________________________
495 void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const
496 {
497   //Print some relevant parameters set for the analysis
498   
499   if(! opt)
500     return;
501         
502   printf("New AOD:            =     %d\n",fNewAOD);
503   printf("Input AOD name:     =     %s\n",fInputAODName.Data());
504   printf("Output AOD name:    =     %s\n",fOutputAODName.Data());
505   printf("Output AOD Class name: =  %s\n",fOutputAODClassName.Data());
506   printf("Min Photon pT       =     %2.2f\n",  fMinPt) ;
507   printf("Max Photon pT       =     %3.2f\n",  fMaxPt) ;
508   printf("Check PID           =     %d\n",     fCheckCaloPID) ;
509   printf("Recalculate PID     =     %d\n",     fRecalculateCaloPID) ;
510   printf("Check Fiducial cut  =     %d\n",     fCheckFidCut) ;
511   printf("Check MC labels     =     %d\n",     fDataMC);
512   printf("Debug Level         =     %d\n",     fDebug);
513   printf("Histograms: %3.1f < pT  < %3.1f,  Nbin = %d\n", fHistoPtMin,  fHistoPtMax,  fHistoPtBins);
514   printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoPhiBins);
515   printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoEtaBins);
516   printf("Histograms: %3.1f < mass < %3.1f, Nbin = %d\n", fHistoMassMin, fHistoMassMax, fHistoMassBins);
517   printf("Histograms: %3.1f < asymmetry < %3.1f, Nbin = %d\n", fHistoAsymMin, fHistoAsymMax, fHistoAsymBins);
518   printf("Name of reference array      : %s\n", fAODObjArrayName.Data());       
519   printf("String added histograms name : %s\n",fAddToHistogramsName.Data());
520         
521   printf("    \n") ;
522   
523
524
525
526