]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrBase/AliCaloTrackReader.h
Remove/comment out the code related to signal plus bacround mixing, since it is avail...
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliCaloTrackReader.h
1 #ifndef ALICALOTRACKREADER_H
2 #define ALICALOTRACKREADER_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 reading data: MonteCarlo, ESD or AOD, of PHOS EMCAL and 
9 // Central Barrel Tracking detectors.
10 // Not all MC particles/tracks/clusters are kept, some kinematical restrictions are done.
11 // Mother class of : AliCaloTrackESDReader: Fills ESD data in 3 TObjArrays (PHOS, EMCAL, CTS)
12 //                 : AliCaloTrackMCReader: Fills Kinematics data in 3 TObjArrays (PHOS, EMCAL, CTS)
13 //                 : AliCaloTrackAODReader: Fills AOD data in 3 TObjArrays (PHOS, EMCAL, CTS) 
14 //  
15 // This part is commented: Mixing analysis can be done, input AOD with events
16 // is opened in the AliCaloTrackReader::Init()
17
18 // -- Author: Gustavo Conesa (INFN-LNF)
19
20 // --- ROOT system ---
21 #include "TObject.h" 
22 class TObjArray ; 
23 #include "TString.h"
24 class TTree ;
25
26 //--- ANALYSIS system ---
27 class AliStack ; 
28 class AliHeader ; 
29 class AliGenEventHeader ; 
30 class AliVEvent;
31 class AliAODEvent;
32 class AliMCEvent;
33 class AliMixedEvent;
34 #include "AliVCaloCells.h"
35 #include "AliFiducialCut.h"
36 class AliAODMCHeader;
37 #include "AliCalorimeterUtils.h"
38
39 class AliCaloTrackReader : public TObject {
40
41 public: 
42   AliCaloTrackReader() ; // ctor
43   virtual ~AliCaloTrackReader() ;//virtual dtor
44 private:
45   AliCaloTrackReader(const AliCaloTrackReader & g) ; // cpy ctor
46   AliCaloTrackReader & operator = (const AliCaloTrackReader & g) ;//cpy assignment
47
48 public:
49   enum inputDataType {kESD, kAOD, kMC};
50   
51   //Select generated events, depending on comparison of pT hard and jets.
52   virtual Bool_t ComparePtHardAndJetPt() ;
53   virtual Bool_t IsPtHardAndJetPtComparisonSet() const {return  fComparePtHardAndJetPt ;}
54   virtual void SetPtHardAndJetPtComparison(Bool_t compare) { fComparePtHardAndJetPt = compare ;}        
55   virtual Float_t GetPtHardAndJetFactor() const {return  fPtHardAndJetPtFactor ;}
56   virtual void SetPtHardAndJetPtFactor(Float_t factor) { fPtHardAndJetPtFactor = factor ;}              
57         
58   virtual void InitParameters();
59   virtual void Print(const Option_t * opt) const;
60
61   virtual Int_t GetDebug()         const { return fDebug ; }
62   virtual void  SetDebug(Int_t d)        { fDebug = d ; }
63   virtual Int_t GetDataType()      const { return fDataType ; }
64   virtual void  SetDataType(Int_t data ) { fDataType = data ; }
65
66   virtual Int_t   GetEventNumber()     const {return fEventNumber ; }
67   virtual TString GetCurrentFileName() const {return fCurrentFileName ; }
68         
69   //Minimum pt setters and getters 
70   virtual Float_t  GetEMCALPtMin() const { return fEMCALPtMin  ; }
71   virtual Float_t  GetPHOSPtMin()  const { return fPHOSPtMin  ; }
72   virtual Float_t  GetCTSPtMin()   const { return fCTSPtMin  ; }
73
74   virtual void SetEMCALPtMin(Float_t  pt) { fEMCALPtMin = pt ; }
75   virtual void SetPHOSPtMin(Float_t  pt)  { fPHOSPtMin = pt ; }
76   virtual void SetCTSPtMin(Float_t  pt)   { fCTSPtMin = pt ; }
77   
78   //Input setters and getters
79
80   Bool_t IsCTSSwitchedOn()  const { return fFillCTS ; }
81   void SwitchOnCTS()    {fFillCTS = kTRUE ; }
82   void SwitchOffCTS()   {fFillCTS = kFALSE ; }
83
84   Bool_t IsEMCALSwitchedOn() const { return fFillEMCAL ; }
85   void SwitchOnEMCAL()  {fFillEMCAL = kTRUE ; }
86   void SwitchOffEMCAL() {fFillEMCAL = kFALSE ; }
87
88   Bool_t IsPHOSSwitchedOn()  const { return fFillPHOS ; }
89   void SwitchOnPHOS()   {fFillPHOS = kTRUE ; }
90   void SwitchOffPHOS()  {fFillPHOS = kFALSE ; }
91
92   Bool_t IsEMCALCellsSwitchedOn() const { return fFillEMCALCells ; }
93   void SwitchOnEMCALCells()  {fFillEMCALCells = kTRUE ; }
94   void SwitchOffEMCALCells() {fFillEMCALCells = kFALSE ; }
95
96   Bool_t IsPHOSCellsSwitchedOn()  const { return fFillPHOSCells ; }
97   void SwitchOnPHOSCells()   {fFillPHOSCells = kTRUE ; }
98   void SwitchOffPHOSCells()  {fFillPHOSCells = kFALSE ; }
99
100   virtual Bool_t FillInputEvent(const Int_t iEntry, const char *currentFileName)  ;
101   virtual void FillInputCTS() ;
102   virtual void FillInputEMCAL() ;
103   virtual void FillInputPHOS() ;
104   virtual void FillInputEMCALCells() ;
105   virtual void FillInputPHOSCells() ;
106
107   virtual TObjArray* GetAODCTS()   const {return fAODCTS ;}
108   virtual TObjArray* GetAODEMCAL() const {return fAODEMCAL ;}
109   virtual TObjArray* GetAODPHOS()  const {return fAODPHOS ;}
110   virtual AliVCaloCells* GetEMCALCells()  const { return fEMCALCells ;}
111   virtual AliVCaloCells* GetPHOSCells()   const { return fPHOSCells ;}
112
113   //Get MC  informatio
114   //Kinematics and galice.root available 
115   virtual AliStack*    GetStack()      const ;
116   virtual AliHeader*   GetHeader()     const ;
117   virtual AliGenEventHeader* GetGenEventHeader() const ;
118   //Filtered kinematics in AOD  
119   virtual TClonesArray*   GetAODMCParticles(Int_t input = 0) const ;
120   virtual AliAODMCHeader* GetAODMCHeader(Int_t input = 0)    const ;
121         
122   virtual AliVEvent*   GetInputEvent()  const {return fInputEvent;}
123   virtual AliAODEvent* GetOutputEvent() const {return fOutputEvent;}
124   virtual AliMCEvent*  GetMC()          const {return fMC;}
125   virtual void         GetVertex(Double_t *) const {;}
126   virtual void         GetSecondInputAODVertex(Double_t *) const {;}
127   virtual Double_t     GetBField() const { return 0.;}
128         
129   virtual void Init();
130         
131 //  virtual void SetInputEvent(AliVEvent* const input)  {fInputEvent  = input;}
132   virtual void SetInputEvent(AliVEvent* const input) ;
133   virtual void SetOutputEvent(AliAODEvent* const aod) {fOutputEvent = aod;}
134   virtual void SetMC(AliMCEvent* const mc)            {fMC  = mc;}
135
136   virtual void ResetLists();
137
138   virtual AliFiducialCut * GetFiducialCut() {if(!fFiducialCut) fFiducialCut = new AliFiducialCut(); 
139           return  fFiducialCut ;}
140   virtual void SetFiducialCut(AliFiducialCut * const fc) { fFiducialCut = fc ;}
141   virtual Bool_t IsFiducialCutOn()       {return fCheckFidCut ; }
142   virtual void SwitchOnFiducialCut()     { fCheckFidCut = kTRUE;  fFiducialCut = new AliFiducialCut();}
143   virtual void SwitchOffFiducialCut()    { fCheckFidCut = kFALSE;}
144         
145   virtual void SetInputOutputMCEvent(AliVEvent* /*esd*/, AliAODEvent* /*aod*/, AliMCEvent* /*mc*/) {;}
146         
147   //Methods for mixing with external input file (AOD)
148   //virtual TTree* GetSecondInputAODTree() const {return  fSecondInputAODTree ; } 
149   //virtual void SetSecondInputAODTree(TTree * tree) {fSecondInputAODTree = tree ;
150   //                                                                                              fSecondInputAODEvent->ReadFromTree(tree);}//Connect tree and AOD event.
151                                         
152   //virtual AliAODEvent* GetSecondInputAODEvent() const { return fSecondInputAODEvent ; } 
153         
154   //TString GetSecondInputFileName() const    {return fSecondInputFileName ; }
155   //void SetSecondInputFileName(TString name) { fSecondInputFileName = name ; }
156
157   //Int_t GetSecondInputFirstEvent() const    {return fSecondInputFirstEvent ; }
158   //void SetSecondInputFirstEvent(Int_t iEvent0) { fSecondInputFirstEvent = iEvent0 ; } 
159         
160 //  Int_t GetAODCTSNormalInputEntries()   {if(!fSecondInputAODTree) { fAODCTSNormalInputEntries   = fAODCTS->GetEntriesFast()  ;}
161 //                                                                               return fAODCTSNormalInputEntries ; }
162 //  Int_t GetAODEMCALNormalInputEntries() {if(!fSecondInputAODTree) { fAODEMCALNormalInputEntries = fAODEMCAL->GetEntriesFast();}
163 //                                                                               return fAODEMCALNormalInputEntries ; }
164 //  Int_t GetAODPHOSNormalInputEntries()  {if(!fSecondInputAODTree) { fAODPHOSNormalInputEntries  = fAODPHOS->GetEntriesFast() ;}
165 //                                                                               return fAODPHOSNormalInputEntries ; }
166         
167   ULong_t GetTrackStatus() const    {return fTrackStatus ; }
168   void SetTrackStatus(ULong_t bit) { fTrackStatus = bit ; }             
169         
170   void SwitchOnStack()              { fReadStack          = kTRUE  ; }
171   void SwitchOffStack()             { fReadStack          = kFALSE ; }
172   void SwitchOnAODMCParticles()     { fReadAODMCParticles = kTRUE  ; }
173   void SwitchOffAODMCParticles()    { fReadAODMCParticles = kFALSE ; }
174   Bool_t ReadStack()          const { return fReadStack            ; }
175   Bool_t ReadAODMCParticles() const { return fReadAODMCParticles   ; }
176         
177   void SetDeltaAODFileName(TString name ) {fDeltaAODFileName = name ; }
178   TString GetDeltaAODFileName() const {return fDeltaAODFileName ; }
179
180   void SetFiredTriggerClassName(TString name ) {fFiredTriggerClassName = name ; }
181   TString GetFiredTriggerClassName() const {return fFiredTriggerClassName ; }
182   virtual TString GetFiredTriggerClasses() {return "";}
183
184   void AnalyzeOnlyLED()     {fAnaLED = kTRUE;}
185   void AnalyzeOnlyPhysics() {fAnaLED = kFALSE;}
186         
187   TString  GetTaskName() const {return fTaskName;}
188   void SetTaskName(TString name) {fTaskName = name;}
189
190   AliCalorimeterUtils * GetCaloUtils() const {return fCaloUtils ; }
191   void SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }
192   
193   Double_t * GetVertex() ;  
194   
195   void SwitchOnWriteStdAOD()  {fWriteOutputStdAOD = kTRUE;}
196   void SwitchOffWriteStdAOD() {fWriteOutputStdAOD = kFALSE;}
197
198  protected:
199   Int_t            fEventNumber; // Event number
200   TString          fCurrentFileName; // Current file name under analysis
201   Int_t            fDataType ;   // Select MC:Kinematics, Data:ESD/AOD, MCData:Both
202   Int_t            fDebug;       // Debugging level
203   AliFiducialCut * fFiducialCut; //! Acceptance cuts
204   Bool_t           fCheckFidCut ;// Do analysis for clusters in defined region         
205
206   Bool_t           fComparePtHardAndJetPt;  // In MonteCarlo, jet events, reject fake events with wrong jet energy.
207   Float_t          fPtHardAndJetPtFactor;   // Factor between ptHard and jet pT to reject/accept event.
208
209   Float_t        fCTSPtMin;      // pT Threshold on charged particles 
210   Float_t        fEMCALPtMin;    // pT Threshold on emcal clusters
211   Float_t        fPHOSPtMin;     // pT Threshold on phos clusters
212
213   TObjArray *    fAODCTS ;        //! temporal referenced array with tracks
214   TObjArray *    fAODEMCAL ;      //! temporal referenced array with EMCAL CaloClusters
215   TObjArray *    fAODPHOS ;       //! temporal referenced array with PHOS CaloClusters
216   AliVCaloCells *fEMCALCells ;    //! temporal array with EMCAL CaloCells, ESD or AOD
217   AliVCaloCells *fPHOSCells ;     //! temporal array with PHOS CaloCells, ESD or AOD
218
219   AliVEvent   *  fInputEvent;     //! pointer to esd or aod input
220   AliAODEvent *  fOutputEvent;    //! pointer to aod output
221   AliMCEvent  *  fMC;             //! Monte Carlo Event Handler  
222
223   Bool_t         fFillCTS;        // use data from CTS
224   Bool_t         fFillEMCAL;      // use data from EMCAL
225   Bool_t         fFillPHOS;       // use data from PHOS
226   Bool_t         fFillEMCALCells; // use data from EMCAL
227   Bool_t         fFillPHOSCells;  // use data from PHOS
228
229 //  TTree *        fSecondInputAODTree;    // Tree with second input AOD, for mixing analysis.  
230 //  AliAODEvent*   fSecondInputAODEvent;   //! pointer to second input AOD event.
231 //  TString        fSecondInputFileName;   // File with AOD data to mix with normal stream of data.
232 //  Int_t          fSecondInputFirstEvent; // First event to be considered in the mixing.
233 //      
234 //  Int_t          fAODCTSNormalInputEntries;   // Number of entries in CTS   in case of standard input, larger with mixing.
235 //  Int_t          fAODEMCALNormalInputEntries; // Number of entries in EMCAL in case of standard input, larger with mixing.
236 //  Int_t          fAODPHOSNormalInputEntries;  // Number of entries in PHOS  in case of standard input, larger with mixing.
237         
238   ULong_t        fTrackStatus        ; // Track selection bit, select tracks refitted in TPC, ITS ...
239   Bool_t         fReadStack          ; // Access kine information from stack
240   Bool_t               fReadAODMCParticles ; // Access kine information from filtered AOD MC particles
241         
242   TString        fDeltaAODFileName ;   // Delta AOD file name
243   TString        fFiredTriggerClassName  ;  // Name of trigger event type used to do the analysis
244
245   Bool_t         fAnaLED;             // Analyze LED data only.
246
247   TString fTaskName;           // Name of task that executes the analysis
248         
249   AliCalorimeterUtils *  fCaloUtils ;  //  Pointer to CalorimeterUtils
250
251   AliMixedEvent* fMixedEvent ;         //! mixed event object. This class is not the owner
252   Int_t          fNMixedEvent ;        //! number of events in mixed event buffer
253   Double_t **    fVertex ;             //! vertex array 3 dim for each mixed event buffer
254   
255   Bool_t               fWriteOutputStdAOD;   // Write selected standard tracks and caloclusters in output AOD
256
257         
258   ClassDef(AliCaloTrackReader,17)
259 } ;
260
261
262 #endif //ALICALOTRACKREADER_H
263
264
265