]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h
1) Do not fill aod file if not requested
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliAnaPartCorrBaseClass.h
1 #ifndef ALIANAPARTCORRBASECLASS_H
2 #define ALIANAPARTCORRBASECLASS_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id: $ */
6
7   //_________________________________________________________________________
8   // Base class for analysis algorithms
9   //-- Author: Gustavo Conesa (INFN-LNF)
10
11 #include <cstdlib>
12
13   //ROOT
14 class TClonesArray ;
15 class TObjArray ;
16 #include <TList.h> 
17 #include <TObject.h>
18 class TObjString;
19
20   //Analysis
21 class AliVCaloCells;
22 #include "AliCaloTrackReader.h"   
23 #include "AliCaloPID.h"
24 #include "AliFiducialCut.h"
25 #include "AliIsolationCut.h"
26 #include "AliMCAnalysisUtils.h"
27 #include "AliNeutralMesonSelection.h"
28 #include "AliCalorimeterUtils.h" 
29 class AliStack ; 
30 class AliHeader ; 
31 class AliGenEventHeader ; 
32 #include "AliAODPWG4ParticleCorrelation.h"
33 class AliEMCALGeoUtils;
34 class AliPHOSGeoUtils;
35 #include "AliMixedEvent.h" 
36
37 class AliAnaPartCorrBaseClass : public TObject {
38         
39 public:   
40   AliAnaPartCorrBaseClass() ; // default ctor
41   virtual ~AliAnaPartCorrBaseClass() ; //virtual dtor
42   
43 private:
44   AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & g) ; // cpy ctor
45   AliAnaPartCorrBaseClass & operator = (const AliAnaPartCorrBaseClass & g) ;//cpy assignment
46   
47 public:
48
49   virtual void AddAODParticle(AliAODPWG4Particle part) ;
50   
51   virtual void ConnectInputOutputAODBranches();
52   
53   virtual TList * GetCreateOutputObjects()      { return (new TList) ;}
54         
55   virtual void AddToHistogramsName(TString add) { fAddToHistogramsName = add; }  
56   virtual TString GetAddedHistogramsStringToName() {return fAddToHistogramsName ;}
57   
58   virtual void Init() {;}
59   virtual void InitParameters() ;
60   
61   virtual void Print(const Option_t * ) const ;
62   
63   virtual void MakeAnalysisFillAOD()  {;}
64   
65   virtual void MakeAnalysisFillHistograms() {;}
66         
67   virtual TObjString * GetAnalysisCuts() {return 0x0;}
68         
69   virtual Int_t GetDebug() const  { return fDebug ; }
70   virtual void SetDebug(Int_t d)   { fDebug = d ; }
71   
72   virtual Int_t GetEventNumber() const ;
73   
74   virtual AliCaloTrackReader * GetReader() const {return fReader ; }
75   virtual void SetReader(AliCaloTrackReader * const reader) { fReader = reader ; }
76   
77   //Calorimeter helper class access methods
78   AliEMCALGeoUtils *  GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry(); }
79   AliPHOSGeoUtils  *  GetPHOSGeometry()  const { return fCaloUtils->GetPHOSGeometry() ; }
80   
81   Int_t GetModuleNumberCellIndexes(const Int_t absId, const TString calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const {
82           return fCaloUtils->GetModuleNumberCellIndexes(absId, calo, icol, irow,iRCU);}
83   Int_t GetModuleNumber(AliAODPWG4Particle * part) const {
84           return fCaloUtils->GetModuleNumber(part, fReader->GetInputEvent());}
85   Int_t GetModuleNumber(AliVCluster * cluster) const {
86           return fCaloUtils->GetModuleNumber(cluster);}
87         
88   virtual void Terminate(TList * /*outputList*/) {;}
89         
90   //analysis AOD branch
91   virtual TClonesArray * GetCreateOutputAODBranch() ;
92   virtual TString GetInputAODName() const {return fInputAODName ; }
93   virtual void SetInputAODName(TString name)   { fInputAODName = name; }        
94   virtual TString GetOutputAODName()  const {return fOutputAODName ; }
95   virtual void SetOutputAODName(TString name)   { fNewAOD = kTRUE ; fOutputAODName = name; }
96   virtual Bool_t NewOutputAOD() const {return fNewAOD;}
97   virtual TString GetOutputAODClassName() const {return fOutputAODClassName;}
98   virtual void SetOutputAODClassName(TString name) {fOutputAODClassName = name; }
99   virtual AliCalorimeterUtils * GetCaloUtils() const {return fCaloUtils ; }
100   void SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }       
101         
102   virtual TString GetAODObjArrayName() const {return fAODObjArrayName;}
103   virtual void SetAODObjArrayName(TString name) {fAODObjArrayName = name; }
104   
105   virtual TClonesArray* GetInputAODBranch() const {return fInputAODBranch ;}
106   virtual TClonesArray* GetOutputAODBranch() const {if(fNewAOD) return fOutputAODBranch; else return fInputAODBranch ;}
107   virtual TClonesArray* GetAODBranch(TString aodBranchName) const ;
108         
109   virtual TClonesArray* GetAODCaloClusters() const ;
110   virtual TClonesArray* GetAODTracks() const ;  
111   virtual AliVCaloCells* GetPHOSCells()  const {return fReader->GetPHOSCells()  ;}
112   virtual AliVCaloCells* GetEMCALCells() const {return fReader->GetEMCALCells() ;}
113
114   virtual TObjArray* GetAODCTS() const ;
115   virtual TObjArray* GetAODEMCAL() const ;
116   virtual TObjArray* GetAODPHOS() const ;
117   
118   virtual TString       GetBaseParametersList();
119     
120   virtual AliStack * GetMCStack() const ;
121   virtual AliHeader* GetMCHeader() const ;
122   virtual AliGenEventHeader* GetMCGenEventHeader() const ;
123   
124   //Analysis helpers classes pointers setters and getters
125   virtual AliCaloPID * GetCaloPID() {if(!fCaloPID) fCaloPID = new AliCaloPID(); return  fCaloPID ;}
126   virtual void SetCaloPID(AliCaloPID * const pid) { fCaloPID = pid ;}
127   
128   virtual AliFiducialCut * GetFiducialCut() {if(!fFidCut) fFidCut = new AliFiducialCut(); return  fFidCut ;}
129   virtual void SetFiducialCut(AliFiducialCut * const fc) { fFidCut = fc ;}
130   
131   virtual AliIsolationCut * GetIsolationCut() {if(!fIC) fIC = new AliIsolationCut();  return  fIC ;}
132   virtual void SetIsolationCut(AliIsolationCut * const ic) { fIC = ic ;}
133   
134   virtual AliMCAnalysisUtils * GetMCAnalysisUtils()  {if(!fMCUtils) fMCUtils = new AliMCAnalysisUtils(); return  fMCUtils ;}
135   virtual void SetMCAnalysisUtils(AliMCAnalysisUtils * const mcutils) { fMCUtils = mcutils ;}   
136   
137   virtual AliNeutralMesonSelection * GetNeutralMesonSelection()  {if(!fNMS) fNMS = new AliNeutralMesonSelection(); return  fNMS ;}
138   virtual void SetNeutralMesonSelection(AliNeutralMesonSelection * const nms) { fNMS = nms ;}
139         
140   virtual Bool_t     IsDataMC()       {return fDataMC ; }
141   virtual void SwitchOnDataMC()       {fDataMC = kTRUE ; if(!fMCUtils)fMCUtils = new AliMCAnalysisUtils();}
142   virtual void SwitchOffDataMC()      {fDataMC = kFALSE ; }
143   
144   virtual Bool_t IsFiducialCutOn()       { return fCheckFidCut ; }
145   virtual void SwitchOnFiducialCut()     { fCheckFidCut = kTRUE;  if(!fFidCut)fFidCut = new AliFiducialCut();}
146   virtual void SwitchOffFiducialCut()    { fCheckFidCut = kFALSE;}
147   
148   virtual Bool_t IsCaloPIDOn()       { return fCheckCaloPID ; }
149   virtual void SwitchOnCaloPID()     { fCheckCaloPID = kTRUE; if(!fCaloPID)fCaloPID = new AliCaloPID();}
150   virtual void SwitchOffCaloPID()    { fCheckCaloPID = kFALSE;}
151   
152   virtual Bool_t IsCaloPIDRecalculationOn()       { return fRecalculateCaloPID ; }
153   virtual void SwitchOnCaloPIDRecalculation()     { fRecalculateCaloPID  = kTRUE;}
154   virtual void SwitchOffCaloPIDRecalculation()    { fRecalculateCaloPID  = kFALSE;}
155   
156   virtual Float_t    GetMaxPt()         const {return fMaxPt ; }
157   virtual Float_t    GetMinPt()         const {return fMinPt ; }
158   virtual void SetMaxPt(Float_t pt)           {fMaxPt = pt ; }
159   virtual void SetMinPt(Float_t pt)           {fMinPt = pt ; }
160   virtual void SetPtCutRange(Double_t ptmin, Double_t ptmax)
161   {  fMaxPt=ptmax;   fMinPt=ptmin;}
162   
163   //Histogrammes setters and getters
164   //Pt, Energy 
165   virtual void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) {
166     fHistoPtBins = n ;
167     fHistoPtMax = max ;
168     fHistoPtMin = min ;
169   }
170   
171   virtual Int_t   GetHistoPtBins()  const { return fHistoPtBins; }
172   virtual Float_t GetHistoPtMin()   const { return fHistoPtMin ; }
173   virtual Float_t GetHistoPtMax()   const { return fHistoPtMax ; }
174   
175     //Azimuthal angle
176   virtual void SetHistoPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) {
177     fHistoPhiBins  = n ;
178     fHistoPhiMax   = max ;
179     fHistoPhiMin   = min ;
180   }
181   
182   virtual Int_t   GetHistoPhiBins()  const { return fHistoPhiBins; }
183   virtual Float_t GetHistoPhiMin()   const { return fHistoPhiMin ; }
184   virtual Float_t GetHistoPhiMax()   const { return fHistoPhiMax ; }
185   
186   //Pseudorapidity-rapidity
187   virtual void SetHistoEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) {
188     fHistoEtaBins = n ;
189     fHistoEtaMax  = max ;
190     fHistoEtaMin  = min ;
191   }
192   
193   virtual Int_t   GetHistoEtaBins()  const { return fHistoEtaBins; }
194   virtual Float_t GetHistoEtaMin()   const { return fHistoEtaMin ; }
195   virtual Float_t GetHistoEtaMax()   const { return fHistoEtaMax ; }
196   
197   //Mass
198   virtual void SetHistoMassRangeAndNBins(Float_t min, Float_t max, Int_t n) {
199     fHistoMassBins = n ;
200     fHistoMassMax  = max ;
201     fHistoMassMin  = min ;
202   }
203         
204   virtual Int_t   GetHistoMassBins()  const { return fHistoMassBins ; }
205   virtual Float_t GetHistoMassMin()   const { return fHistoMassMin ; }
206   virtual Float_t GetHistoMassMax()   const { return fHistoMassMax ; }
207         
208   //Asymetry
209   virtual void SetHistoAsymmetryRangeAndNBins(Float_t min, Float_t max, Int_t n) {
210     fHistoAsymBins = n ;
211     fHistoAsymMax  = max ;
212     fHistoAsymMin  = min ;
213   }
214         
215   virtual Int_t   GetHistoAsymmetryBins()  const { return fHistoAsymBins ; }
216   virtual Float_t GetHistoAsymmetryMin()   const { return fHistoAsymMin ; }
217   virtual Float_t GetHistoAsymmetryMax()   const { return fHistoAsymMax ; }     
218   
219   virtual AliMixedEvent * GetMixedEvent() ; 
220   Int_t GetNMixedEvent() const { return fNMixedEvent ; } 
221   Double_t *  GetVertex(Int_t i) const { return fVertex[i] ; } 
222
223         virtual Bool_t IsTrackMatched(AliVCluster * cluster) const ; 
224   
225 private:    
226   
227   Bool_t  fDataMC ;             // Flag to access MC data when using ESD or AOD     
228   Int_t   fDebug ;              // Debug level
229   Bool_t  fCheckFidCut ;        // Do analysis for clusters in defined region         
230   Bool_t  fCheckCaloPID ;       // Do analysis for calorimeters
231   Bool_t  fRecalculateCaloPID ; // Recalculate PID or use PID weights in calorimeters
232   Float_t fMinPt ;              // Maximum pt of (trigger) particles in the analysis
233   Float_t fMaxPt ;              // Minimum pt of (trigger) particles in the analysis
234         
235   AliCaloTrackReader * fReader; // Acces to ESD/AOD/MC data
236   
237   TClonesArray* fInputAODBranch ;    //! Selected input particles branch
238   TString       fInputAODName ;      //  Name of input AOD branch;
239   TClonesArray* fOutputAODBranch ;   //! Selected output particles branch
240   Bool_t        fNewAOD ;            //  Flag, new aod branch added to the analysis or not.
241   TString       fOutputAODName ;     //  Name of output AOD branch;
242   TString       fOutputAODClassName; //  Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelation ...)   
243   TString       fAODObjArrayName ;   // Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track references.
244   TString       fAddToHistogramsName;// Add this string to histograms name
245   
246   //Analysis helper classes access pointers
247   AliCaloPID               * fCaloPID; //! PID calculation
248   AliFiducialCut           * fFidCut;  //! Acceptance cuts
249   AliIsolationCut          * fIC;      //! Isolation cut 
250   AliMCAnalysisUtils       * fMCUtils; //! MonteCarlo Analysis utils 
251   AliNeutralMesonSelection * fNMS;     //! Neutral Meson Selection
252   AliCalorimeterUtils      * fCaloUtils ; //  Pointer to CalorimeterUtils
253   
254
255   //Histograms binning and range    
256   Int_t   fHistoPtBins   ;  // Number of bins in pt axis
257   Float_t fHistoPtMax    ;  // Maximum value of pt histogram range
258   Float_t fHistoPtMin    ;  // Minimum value of pt histogram range
259   Int_t   fHistoPhiBins  ;  // Number of bins in phi axis
260   Float_t fHistoPhiMax   ;  // Maximum value of phi histogram range
261   Float_t fHistoPhiMin   ;  // Minimum value of phi histogram range
262   Int_t   fHistoEtaBins  ;  // Number of bins in eta axis
263   Float_t fHistoEtaMax   ;  // Maximum value of eta histogram range
264   Float_t fHistoEtaMin   ;  // Minimum value of eta histogram range
265   Int_t   fHistoMassBins ;  // Number of bins in mass axis
266   Float_t fHistoMassMax  ;  // Maximum value of mass histogram range
267   Float_t fHistoMassMin  ;  // Minimum value of mass histogram range
268   Int_t   fHistoAsymBins ;  // Number of bins in asymmetry axis
269   Float_t fHistoAsymMax  ;  // Maximum value of asymmetry histogram range
270   Float_t fHistoAsymMin  ;  // Minimum value of asymmetry histogram range
271   
272   AliMixedEvent * fMixedEvent ;  //! mixed event object
273   Int_t           fNMixedEvent ; //! number of events in mixed event buffer
274   Double_t **     fVertex ;      //! vertex array 3 dim for each mixed event buffer
275
276   
277         
278   ClassDef(AliAnaPartCorrBaseClass,8)
279 } ;
280
281
282 #endif //ALIANAPARTCORRBASECLASS_H
283
284
285