]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx
Correct the way the standard AOD are cleaned, when used as temporary containers.
[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 "AliCaloPID.h"
31 #include "AliFidutialCut.h"
32 #include "AliIsolationCut.h"
33 #include "AliMCAnalysisUtils.h"
34 #include "AliNeutralMesonSelection.h"
35 #include "AliAODCaloCells.h" 
36 #include "AliAODEvent.h"
37 #include "AliAODHandler.h"
38 #include "AliAnalysisManager.h"
39
40 ClassImp(AliAnaPartCorrBaseClass)
41   
42   
43 //_______________________________________________
44   AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass() : 
45     TObject(), fDataMC(0), fDebug(0), fCheckFidCut(0),
46     fCheckCaloPID(0), fRecalculateCaloPID(0), fMinPt(0), fMaxPt(0),
47     fReader(0x0), fInputAODBranch(0x0), fInputAODName(""),
48     fOutputAODBranch(0x0), fNewAOD(kFALSE),
49     fOutputAODName(""), fOutputAODClassName(""),
50     fAODObjArrayName(""), fAddToHistogramsName(""),
51     fAODCaloCells(0x0),//fAODCaloClusters(0x0),  
52     fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fMCUtils(0x0), fNMS(0x0),
53     fHistoNPtBins(0),  fHistoPtMax(0.),  fHistoPtMin(0.),
54     fHistoNPhiBins(0), fHistoPhiMax(0.), fHistoPhiMin(0.),
55     fHistoNEtaBins(0), fHistoEtaMax(0.), fHistoEtaMin(0.)
56 {
57   //Default Ctor
58   
59   fReader  = new AliCaloTrackReader();
60   fCaloPID = new AliCaloPID();
61   fFidCut  = new AliFidutialCut();
62   fIC      = new AliIsolationCut();
63   fMCUtils = new AliMCAnalysisUtils();
64   
65   //Initialize parameters
66   InitParameters();
67 }
68
69 //___________________________________________________________
70 AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & abc) :   
71   TObject(), fDataMC(abc.fDataMC), fDebug(abc.fDebug),
72   fCheckFidCut(abc.fCheckFidCut),  fCheckCaloPID(abc. fCheckCaloPID),
73   fRecalculateCaloPID(abc.fRecalculateCaloPID),
74   fMinPt(abc.fMinPt), fMaxPt(abc.fMaxPt), fReader(abc.fReader),  
75   fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName),
76   fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD), 
77   fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName),
78   fAODObjArrayName(abc.fAODObjArrayName),
79   fAddToHistogramsName(abc.fAddToHistogramsName),
80   //fAODCaloClusters(new TClonesArray(*abc.fAODCaloClusters)),
81   fAODCaloCells(new AliAODCaloCells(*abc.fAODCaloCells)),
82   fCaloPID(abc.fCaloPID), fFidCut(abc.fFidCut), fIC(abc.fIC),fMCUtils(abc.fMCUtils), fNMS(abc.fNMS),
83   fHistoNPtBins(abc.fHistoNPtBins),   fHistoPtMax(abc.fHistoPtMax),   fHistoPtMin(abc.fHistoPtMin),
84   fHistoNPhiBins(abc.fHistoNPhiBins), fHistoPhiMax(abc.fHistoPhiMax), fHistoPhiMin(abc.fHistoPhiMin),
85   fHistoNEtaBins(abc.fHistoNEtaBins), fHistoEtaMax(abc.fHistoEtaMax), fHistoEtaMin(abc.fHistoEtaMin)
86 {
87   // cpy ctor
88   
89 }
90
91 //_________________________________________________________________________
92 AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartCorrBaseClass & abc)
93 {
94   // assignment operator
95   
96   if(this == &abc) return *this;
97   ((TObject *)this)->operator=(abc);
98   
99   fDataMC             = abc.fDataMC;
100   fDebug              = abc.fDebug ;
101   fRecalculateCaloPID = abc.fRecalculateCaloPID ;
102   fCheckCaloPID       = abc.fCheckCaloPID ;
103   fCheckFidCut        = abc.fCheckFidCut ; 
104         
105   fReader             = abc.fReader ;
106   //fAODCaloClusters   = new TClonesArray(*abc.fAODCaloClusters) ;
107   fAODCaloCells      = new AliAODCaloCells(*abc.fAODCaloCells) ;
108   
109   fMinPt   = abc.fMinPt;
110   fMaxPt   = abc.fMaxPt;
111   fCaloPID = abc.fCaloPID;  
112   fFidCut  = abc.fFidCut;
113   fIC      = abc.fIC;
114   fMCUtils = abc.fMCUtils;
115   fNMS     = abc.fNMS;
116   
117   fInputAODBranch      = new TClonesArray(*abc.fInputAODBranch) ;
118   fInputAODName        = abc.fInputAODName;
119   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   fHistoNPtBins  = abc.fHistoNPtBins;  fHistoPtMax  = abc.fHistoPtMax;  fHistoPtMin  = abc.fHistoPtMin;
127   fHistoNPhiBins = abc.fHistoNPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin;
128   fHistoNEtaBins = abc.fHistoNEtaBins; 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         
139   if(fOutputAODBranch){
140     fOutputAODBranch->Clear() ; 
141     delete fOutputAODBranch ;
142   }
143   
144   if(fInputAODBranch){
145     fInputAODBranch->Clear() ; 
146     delete fInputAODBranch ;
147   }
148   
149 //      if(fAODCaloClusters){
150 //              fAODCaloClusters->Clear() ; 
151 //              delete fAODCaloClusters ;
152 //      }
153         
154   if(fAODCaloCells){
155     fAODCaloCells->Clear() ; 
156     delete fAODCaloCells ;
157   }
158   
159   if(fReader)  delete fReader ;
160   if(fCaloPID) delete fCaloPID ;
161   if(fFidCut)  delete fFidCut ;
162   if(fIC)      delete fIC ;
163   if(fMCUtils) delete fMCUtils ;
164   if(fNMS)     delete fNMS ;
165   
166 }
167
168 ////____________________________________________________________________________
169 //void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
170 //  //Put AOD calo cluster in the CaloClusters array
171 //
172 //  Int_t i = fAODCaloClusters->GetEntriesFast();
173 //  new((*fAODCaloClusters)[i])  AliAODCaloCluster(calo);
174 //
175 //}
176
177
178 //____________________________________________________________________________
179 void AliAnaPartCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc) {
180   //Put AOD calo cluster in the AODParticleCorrelation array
181   
182   if(fOutputAODBranch){
183     
184     Int_t i = fOutputAODBranch->GetEntriesFast();
185     //new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
186     if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
187       new((*fOutputAODBranch)[i])  AliAODPWG4Particle(pc);
188     else   if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
189       new((*fOutputAODBranch)[i])  AliAODPWG4ParticleCorrelation(pc);
190     else {
191       printf("AliAnaPartCorrBaseClass::AddAODParticle() - Cannot add an object of type < %s >, to the AOD TClonesArray \n",  
192              fOutputAODBranch->GetClass()->GetName());
193       abort();    
194     }
195   }
196   else {
197     printf(" AliAnaPartCorrBaseClass::AddAODParticle() - No AOD branch available!!!\n");
198     abort();
199   }
200
201 }       
202
203
204 //___________________________________________________
205 //void AliAnaPartCorrBaseClass::ConnectAODCaloClusters() {
206 //  //Recover the list of AODCaloClusters
207 //
208 //  fAODCaloClusters = fReader->GetOutputEvent()->GetCaloClusters();
209 //
210 //}
211 //
212 //___________________________________________________
213 void AliAnaPartCorrBaseClass::ConnectAODPHOSCells() {
214   //Recover the list of PHOS AODCaloCells 
215
216   fAODCaloCells = fReader->GetOutputEvent()->GetPHOSCells();
217
218 }
219
220 //___________________________________________________
221 void AliAnaPartCorrBaseClass::ConnectAODEMCALCells() {
222   //Recover the list of EMCAL AODCaloCells 
223
224   fAODCaloCells = fReader->GetOutputEvent()->GetEMCALCells();
225
226 }
227
228 //___________________________________________________
229 TClonesArray * AliAnaPartCorrBaseClass::GetAODBranch(TString aodName) const {
230         //Recover ouput and input AOD pointers for each event in the maker
231         
232         //Delta AODs
233         AliAODHandler* aodHandler = (AliAODHandler*) 
234         ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
235         if (aodHandler->GetExtensions()) { 
236                 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
237                 if(ext){
238                         AliAODEvent *aodEvent = ext->GetAOD(); 
239                         TClonesArray * aodbranch =  (TClonesArray*) aodEvent->FindListObject(aodName);
240                         if(aodbranch) return aodbranch;
241                          else return  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
242                 }
243                 else{//If no Delta AODs, kept in standard branch, to revise. 
244                         return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
245                 }
246         }
247         else{ //If no Delta AODs, kept in standard branch, to revise. 
248                 return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
249         }
250 }
251
252
253 //___________________________________________________
254 void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() {
255   //Recover ouput and input AOD pointers for each event in the maker
256         
257   //Delta AODs
258   AliAODHandler* aodHandler = (AliAODHandler*) 
259         ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); 
260   if (aodHandler->GetExtensions()) { 
261           AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName()); 
262           if(ext){
263           AliAODEvent *aodEvent = ext->GetAOD(); 
264           fOutputAODBranch = (TClonesArray*) aodEvent->FindListObject(fOutputAODName);
265           fInputAODBranch = (TClonesArray*) aodEvent->FindListObject(fInputAODName);      
266           if(!fOutputAODBranch) fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
267           if(!fInputAODBranch)  fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
268           }
269           else{//If no Delta AODs, kept in standard branch, to revise. 
270                   fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
271                   fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);                
272           }
273   }
274   else{ //If no Delta AODs, kept in standard branch, to revise. 
275         fOutputAODBranch =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
276         fInputAODBranch  =  (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);          
277   }
278 }
279
280 //__________________________________________________
281 TObjArray *  AliAnaPartCorrBaseClass::GetAODCTS() const {
282   //Get list of referenced tracks from reader
283
284   return fReader->GetAODCTS(); 
285
286 }
287
288 //__________________________________________________
289 TObjArray *  AliAnaPartCorrBaseClass::GetAODPHOS() const {
290   //Get list of PHOS reference caloclusters from reader
291
292   return fReader->GetAODPHOS(); 
293
294 }
295
296 //__________________________________________________
297 TObjArray *  AliAnaPartCorrBaseClass::GetAODEMCAL() const {
298   //Get list of emcal referenced caloclusters from reader
299
300   return fReader->GetAODEMCAL(); 
301
302 }
303
304 //__________________________________________________
305 TClonesArray *  AliAnaPartCorrBaseClass::GetAODCaloClusters() const {
306   //Get list of all caloclusters in AOD output file 
307
308   return fReader->GetOutputEvent()->GetCaloClusters(); 
309
310 }
311
312 //__________________________________________________
313 TClonesArray *  AliAnaPartCorrBaseClass::GetAODTracks() const {
314   //Get list of all tracks in AOD output file 
315
316   return fReader->GetOutputEvent()->GetTracks(); 
317
318 }
319
320 //__________________________________________________
321 TString  AliAnaPartCorrBaseClass::GetBaseParametersList()  {
322   //Put data member values in string to keep in output container
323
324   TString parList ; //this will be list of parameters used for this analysis.
325   char onePar[255] ;
326   sprintf(onePar,"--- AliAnaPartCorrBaseClass ---\n") ;
327   parList+=onePar ;     
328   sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
329   parList+=onePar ;
330   sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
331   parList+=onePar ;
332   sprintf(onePar,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
333   parList+=onePar ;
334   sprintf(onePar,"fCheckFidCut=%d (Check Fidutial cut selection on/off) \n",fCheckFidCut) ;
335   parList+=onePar ;
336   sprintf(onePar,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
337   parList+=onePar ;
338   sprintf(onePar,"fRecalculateCaloPID  =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
339   parList+=onePar ;
340   sprintf(onePar,"fInputAODName  =%s Input AOD name \n",fInputAODName.Data()) ;
341   parList+=onePar ;     
342   if(fNewAOD){
343      sprintf(onePar,"fOutputAODName  =%s Output AOD name \n",fOutputAODName.Data()) ;
344      parList+=onePar ;  
345          sprintf(onePar,"fOutputAODClassName  =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
346          parList+=onePar ;      
347   }
348   sprintf(onePar,"fAODObjArrayName  =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ;
349   parList+=onePar ;     
350   sprintf(onePar,"fAddToHistogramsName  =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
351   parList+=onePar ;     
352         
353   return parList; 
354
355 }
356
357 //__________________________________________________
358  TClonesArray * AliAnaPartCorrBaseClass::GetCreateOutputAODBranch() {
359    //Create AOD branch filled in the analysis
360    
361    printf("Create AOD branch of %s objects and with name < %s >\n",
362           fOutputAODClassName.Data(),fOutputAODName.Data()) ;
363    
364    TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
365    aodBranch->SetName(fOutputAODName);
366    return aodBranch ;
367    
368  }
369
370 //__________________________________________________
371 TNamed *  AliAnaPartCorrBaseClass::GetPHOSCells() const {
372   //Get list of PHOS calo cells (ESD or AOD) from reader
373   
374   return fReader->GetPHOSCells(); 
375   
376 }
377
378
379 //__________________________________________________
380 TNamed *  AliAnaPartCorrBaseClass::GetEMCALCells() const {
381   //Get list of emcal calo cells (ESD or AOD) from reader
382   
383   return fReader->GetEMCALCells(); 
384
385 }
386
387 //__________________________________________________
388 Int_t AliAnaPartCorrBaseClass::GetEventNumber() const {
389         //Get current event number
390         
391         return fReader->GetEventNumber() ; 
392 }
393         
394 //__________________________________________________
395 AliStack *  AliAnaPartCorrBaseClass::GetMCStack() const {
396   //Get stack pointer from reader
397
398   return fReader->GetStack(); 
399
400 }
401 //__________________________________________________
402 AliHeader *  AliAnaPartCorrBaseClass::GetMCHeader() const {
403   //Get header pointer from reader
404
405   return fReader->GetHeader(); 
406
407 }
408
409 //__________________________________________________
410 AliGenEventHeader *  AliAnaPartCorrBaseClass::GetMCGenEventHeader() const {
411   //Get GenEventHeader pointer from reader
412
413   return fReader->GetGenEventHeader(); 
414
415 }
416
417 //__________________________________________________
418 void AliAnaPartCorrBaseClass::InitParameters()
419
420   //Initialize the parameters of the analysis.
421   fDataMC = kFALSE;
422   fDebug = -1;
423   fCheckCaloPID = kTRUE ;
424   fCheckFidCut = kFALSE ;
425   fRecalculateCaloPID = kFALSE ;
426   fMinPt = 0.2 ; //Min pt in particle analysis
427   fMaxPt = 300. ; //Max pt in particle analysis
428
429   fCaloPID = new AliCaloPID ;  
430   fFidCut = new AliFidutialCut;
431   fIC = new AliIsolationCut;
432   fNMS = new AliNeutralMesonSelection;
433   fNewAOD = kFALSE ;
434   fOutputAODName = "PartCorr";
435   fOutputAODClassName = "AliAODPWG4Particle";
436   fInputAODName = "PartCorr";
437   fAddToHistogramsName = "";
438   fAODObjArrayName="Ref";
439           
440   //Histogrammes settings
441   fHistoNPtBins = 240 ;
442   fHistoPtMax   = 120 ;
443   fHistoPtMin   = 0.  ;
444
445   fHistoNPhiBins = 120 ;
446   fHistoPhiMax   = TMath::TwoPi();
447   fHistoPhiMin   = 0.  ;
448
449   fHistoNEtaBins = 100 ;
450   fHistoEtaMax   =  1  ;
451   fHistoEtaMin   = -1  ;
452
453 }
454
455 //__________________________________________________________________
456 void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const
457 {
458   //Print some relevant parameters set for the analysis
459   
460   if(! opt)
461     return;
462         
463   printf("New AOD:            =     %d\n",fNewAOD);
464   printf("Input AOD name:     =     %s\n",fInputAODName.Data());
465   printf("Output AOD name:    =     %s\n",fOutputAODName.Data());
466   printf("Output AOD Class name: =  %s\n",fOutputAODClassName.Data());
467   printf("Min Photon pT       =     %2.2f\n",  fMinPt) ;
468   printf("Max Photon pT       =     %3.2f\n",  fMaxPt) ;
469   printf("Check PID           =     %d\n",     fCheckCaloPID) ;
470   printf("Recalculate PID     =     %d\n",     fRecalculateCaloPID) ;
471   printf("Check Fidutial cut  =     %d\n",     fCheckFidCut) ;
472   printf("Check MC labels     =     %d\n",     fDataMC);
473   printf("Debug Level         =     %d\n",     fDebug);
474   printf("Histograms: %3.1f < pT < %3.1f,  Nbin = %d\n", fHistoPtMin,  fHistoPtMax,  fHistoNPtBins);
475   printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoNPhiBins);
476   printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoNEtaBins);
477   printf("Name of reference array      : %s\n", fAODObjArrayName.Data());       
478   printf("String added histograms name : %s\n",fAddToHistogramsName.Data());
479         
480   printf("    \n") ;
481   
482