]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/CaloTrackCorrBase/AliCaloTrackReader.h
remove old code
[u/mrichter/AliRoot.git] / PWG / CaloTrackCorrBase / 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
6 //_________________________________________________________________________
7 // Base class for reading data: MonteCarlo, ESD or AOD, of PHOS EMCAL and 
8 // Central Barrel Tracking detectors.
9 // Not all MC particles/tracks/clusters are kept, some kinematical restrictions are done.
10 // Mother class of : AliCaloTrackESDReader: Fills ESD data in 3 TObjArrays (PHOS, EMCAL, CTS)
11 //                 : AliCaloTrackMCReader : Fills Kinematics data in 3 TObjArrays (PHOS, EMCAL, CTS)
12 //                 : AliCaloTrackAODReader: Fills AOD data in 3 TObjArrays (PHOS, EMCAL, CTS)   
13 // -- Author: Gustavo Conesa (INFN-LNF)
14 //////////////////////////////////////////////////////////////////////////////
15
16 // --- ROOT system ---
17 #include <TObject.h> 
18 #include <TString.h>
19 class TObjArray ; 
20 class TTree ;
21 class TArrayI ;
22
23 //--- ANALYSIS system ---
24 #include "AliVEvent.h"
25 class AliVCaloCells;
26 class AliStack; 
27 class AliHeader; 
28 class AliGenEventHeader; 
29 class AliAODEvent;
30 class AliMCEvent;
31 class AliMixedEvent;
32 class AliAODMCHeader;
33 class AliESDtrackCuts;
34 class AliCentrality;
35 class AliTriggerAnalysis;
36 class AliEventplane;
37 class AliVCluster;
38
39 // --- CaloTrackCorr / EMCAL ---
40 #include "AliFiducialCut.h"
41 class AliEMCALRecoUtils;
42 class AliCalorimeterUtils;
43
44 class AliCaloTrackReader : public TObject {
45
46 public: 
47   
48   AliCaloTrackReader() ;          // ctor
49   virtual ~AliCaloTrackReader() ; // virtual dtor
50   
51   //--------------------------------
52   // General methods
53   //--------------------------------
54
55   virtual void    Init();
56     
57   virtual void    InitParameters();
58   
59   virtual void    Print(const Option_t * opt) const;
60   
61   virtual void    ResetLists();
62
63   virtual Int_t   GetDebug()                         const { return fDebug                 ; }
64   virtual void    SetDebug(Int_t d)                        { fDebug = d                    ; }
65   
66   enum inputDataType {kESD, kAOD, kMC};
67   virtual Int_t   GetDataType()                      const { return fDataType              ; }
68   virtual void    SetDataType(Int_t data )                 { fDataType = data              ; }
69
70   virtual Int_t   GetEventNumber()                   const { return fEventNumber           ; }
71         
72   TString         GetTaskName()                      const { return fTaskName              ; }
73   void            SetTaskName(TString name)                { fTaskName = name              ; }
74     
75   //---------------------------------------
76   // Input/output event setters and getters
77   //---------------------------------------
78   
79   virtual void    SetInputEvent(AliVEvent* const input) ;
80   virtual void    SetOutputEvent(AliAODEvent* const aod)   { fOutputEvent = aod            ; }
81   virtual void    SetMC(AliMCEvent* const mc)              { fMC          = mc             ; }
82   virtual void    SetInputOutputMCEvent(AliVEvent* /*esd*/, AliAODEvent* /*aod*/, AliMCEvent* /*mc*/) { ; }
83   
84   // Delta AODs
85   
86   virtual TList * GetAODBranchList()                 const { return fAODBranchList         ; }
87   void            SetDeltaAODFileName(TString name )       { fDeltaAODFileName = name      ; }
88   TString         GetDeltaAODFileName()              const { return fDeltaAODFileName      ; }
89   void            SwitchOnWriteDeltaAOD()                  { fWriteOutputDeltaAOD = kTRUE  ; }
90   void            SwitchOffWriteDeltaAOD()                 { fWriteOutputDeltaAOD = kFALSE ; }
91   Bool_t          WriteDeltaAODToFile()              const { return fWriteOutputDeltaAOD   ; } 
92   
93   //------------------------------------------------------------
94   // Clusters/Tracks arrays filtering/filling methods and switchs 
95   //------------------------------------------------------------
96   
97   // Minimum pt setters and getters
98   
99   Float_t          GetEMCALPtMin()                   const { return fEMCALPtMin            ; }
100   Float_t          GetPHOSPtMin()                    const { return fPHOSPtMin             ; }
101   Float_t          GetCTSPtMin()                     const { return fCTSPtMin              ; }
102   Float_t          GetEMCALPtMax()                   const { return fEMCALPtMax            ; }
103   Float_t          GetPHOSPtMax()                    const { return fPHOSPtMax             ; }
104   Float_t          GetCTSPtMax()                     const { return fCTSPtMax              ; }
105   
106   void             SetEMCALPtMin(Float_t  pt)              { fEMCALPtMin = pt              ; }
107   void             SetPHOSPtMin (Float_t  pt)              { fPHOSPtMin  = pt              ; }
108   void             SetCTSPtMin  (Float_t  pt)              { fCTSPtMin   = pt              ; }  
109   
110   void             SetEMCALPtMax(Float_t  pt)              { fEMCALPtMax = pt              ; }
111   void             SetPHOSPtMax (Float_t  pt)              { fPHOSPtMax  = pt              ; }
112   void             SetCTSPtMax  (Float_t  pt)              { fCTSPtMax   = pt              ; }  
113    
114   Float_t          GetEMCALEMin()                    const { return GetEMCALPtMin()        ; }
115   Float_t          GetPHOSEMin()                     const { return GetPHOSPtMin()         ; }
116   Float_t          GetEMCALEMax()                    const { return GetEMCALPtMax()        ; }
117   Float_t          GetPHOSEMax()                     const { return GetPHOSPtMax()         ; }
118   
119   void             SetEMCALEMin (Float_t  e)               { SetEMCALPtMin(e)              ; }
120   void             SetPHOSEMin  (Float_t  e)               { SetPHOSPtMin (e)              ; }
121   void             SetEMCALEMax (Float_t  e)               { SetEMCALPtMax(e)              ; }
122   void             SetPHOSEMax  (Float_t  e)               { SetPHOSPtMax (e)              ; }
123   
124   // Track DCA cut
125   
126   Bool_t           AcceptDCA(const Float_t pt, const Float_t dca);
127   Double_t         GetTrackDCACut(Int_t i)           const { if(i >= 0 && i < 3 ) return fTrackDCACut[i] ;
128                                                              else return -999              ; }
129   
130   void             SetTrackDCACut(Int_t i, Float_t cut)    { if(i >= 0 && i < 3 )
131                                                              fTrackDCACut[i] = cut         ; }
132   
133   void             SwitchOnUseTrackDCACut()                { fUseTrackDCACut = kTRUE       ; }
134   void             SwitchOffUseTrackDCACut()               { fUseTrackDCACut = kFALSE      ; }
135   Bool_t           IsDCACutOn()                      const { return fUseTrackDCACut        ; }
136   
137   // Time cut
138   
139   Double_t         GetTrackTimeCutMin()              const { return fTrackTimeCutMin       ; }
140   Double_t         GetTrackTimeCutMax()              const { return fTrackTimeCutMax       ; }
141   
142   void             SetTrackTimeCut(Double_t a, Double_t b) { fTrackTimeCutMin = a ;
143                                                              fTrackTimeCutMax = b          ; } // ns
144   
145   void             SwitchOnUseTrackTimeCut()               { fUseTrackTimeCut = kTRUE      ; }
146   void             SwitchOffUseTrackTimeCut()              { fUseTrackTimeCut = kFALSE     ; }
147   
148   Double_t         GetEMCALTimeCutMin()              const { return fEMCALTimeCutMin       ; }
149   Double_t         GetEMCALTimeCutMax()              const { return fEMCALTimeCutMax       ; }  
150
151   Bool_t           IsInTimeWindow(const Double_t tof, const Float_t energy)  const ;
152   
153   void             SetEMCALTimeCut(Double_t a, Double_t b) { fEMCALTimeCutMin = a ; 
154                                                              fEMCALTimeCutMax = b          ; } // ns
155   
156   void             SetEMCALParametrizedMinTimeCut(Int_t i, Float_t par) { fEMCALParamTimeCutMin[i] = par ; } 
157   void             SetEMCALParametrizedMaxTimeCut(Int_t i, Float_t par) { fEMCALParamTimeCutMax[i] = par ; } 
158   
159   void             SwitchOnUseEMCALTimeCut()               { fUseEMCALTimeCut = kTRUE      ; }
160   void             SwitchOffUseEMCALTimeCut()              { fUseEMCALTimeCut = kFALSE     ; }
161   
162   void             SwitchOnUseParametrizedTimeCut()        { fUseParamTimeCut = kTRUE      ; }
163   void             SwitchOffUseParametrizedTimeCut()       { fUseParamTimeCut = kFALSE     ; }
164
165   // Fidutial cuts
166   
167   virtual AliFiducialCut * GetFiducialCut()                { 
168                     if(!fFiducialCut) fFiducialCut = new AliFiducialCut(); 
169                     return  fFiducialCut                                                   ; }
170   virtual void     SetFiducialCut(AliFiducialCut * const fc) { fFiducialCut = fc           ; }
171   virtual Bool_t   IsFiducialCutOn()                 const { return fCheckFidCut           ; }
172   virtual void     SwitchOnFiducialCut()                   { fCheckFidCut = kTRUE          ; 
173                                                              fFiducialCut = new AliFiducialCut() ; }
174   virtual void     SwitchOffFiducialCut()                  { fCheckFidCut = kFALSE         ; }
175   
176   // Cluster origin
177   
178   Bool_t           IsEMCALCluster(AliVCluster *clus) const;
179   Bool_t           IsPHOSCluster (AliVCluster *clus) const;
180   
181   // Patch for cluster origin for Old AODs implementation
182   
183   void             SwitchOnOldAODs()                       { fOldAOD = kTRUE               ; }
184   void             SwitchOffOldAODs()                      { fOldAOD = kFALSE              ; }
185   
186   // Cluster/track/cells switchs
187   
188   Bool_t           IsCTSSwitchedOn()                 const { return fFillCTS               ; }
189   void             SwitchOnCTS()                           { fFillCTS = kTRUE              ; }
190   void             SwitchOffCTS()                          { fFillCTS = kFALSE             ; }
191
192   Bool_t           IsEMCALSwitchedOn()               const { return fFillEMCAL             ; }
193   void             SwitchOnEMCAL()                         { fFillEMCAL = kTRUE            ; }
194   void             SwitchOffEMCAL()                        { fFillEMCAL = kFALSE           ; }
195
196   Bool_t           IsPHOSSwitchedOn()                const { return fFillPHOS              ; }
197   void             SwitchOnPHOS()                          { fFillPHOS = kTRUE             ; }
198   void             SwitchOffPHOS()                         { fFillPHOS = kFALSE            ; }
199
200   Bool_t           IsEMCALCellsSwitchedOn()          const { return fFillEMCALCells        ; }
201   void             SwitchOnEMCALCells()                    { fFillEMCALCells = kTRUE       ; }
202   void             SwitchOffEMCALCells()                   { fFillEMCALCells = kFALSE      ; }
203
204   Bool_t           IsPHOSCellsSwitchedOn()           const { return fFillPHOSCells         ; }
205   void             SwitchOnPHOSCells()                     { fFillPHOSCells = kTRUE        ; }
206   void             SwitchOffPHOSCells()                    { fFillPHOSCells = kFALSE       ; }
207
208   Bool_t           AreClustersRecalculated()         const { return fRecalculateClusters   ; }
209   void             SwitchOnClusterRecalculation()          { fRecalculateClusters = kTRUE  ; }
210   void             SwitchOffClusterRecalculation()         { fRecalculateClusters = kFALSE ; }  
211   
212   Bool_t           IsEmbeddedClusterSelectionOn()    const { return fSelectEmbeddedClusters   ; }
213   void             SwitchOnEmbeddedClustersSelection()     { fSelectEmbeddedClusters = kTRUE  ; }
214   void             SwitchOffEmbeddedClustersSelection()    { fSelectEmbeddedClusters = kFALSE ; }
215   
216   // Filling/ filtering / detector information access methods
217   
218   virtual Bool_t   FillInputEvent(const Int_t iEntry, const char *currentFileName)  ;
219   virtual void     FillInputCTS() ;
220   virtual void     FillInputEMCAL() ;
221   virtual void     FillInputEMCALAlgorithm(AliVCluster * clus, const Int_t iclus) ;
222   virtual void     FillInputPHOS() ;
223   virtual void     FillInputEMCALCells() ;
224   virtual void     FillInputPHOSCells() ;
225   virtual void     FillInputVZERO() ;  
226   
227   Int_t            GetV0Signal(Int_t i)              const { return fV0ADC[i]               ; }
228   Int_t            GetV0Multiplicity(Int_t i)        const { return fV0Mul[i]               ; }
229   
230   void             SetEMCALClusterListName(TString &name)  { fEMCALClustersListName = name  ; }
231   TString          GetEMCALClusterListName()         const { return fEMCALClustersListName  ; }
232
233   // Arrays with clusters/track/cells access method
234   
235   virtual TObjArray*     GetCTSTracks()              const { return fCTSTracks              ; }
236   virtual TObjArray*     GetEMCALClusters()          const { return fEMCALClusters          ; }
237   virtual TObjArray*     GetPHOSClusters()           const { return fPHOSClusters           ; }
238   virtual AliVCaloCells* GetEMCALCells()             const { return fEMCALCells             ; }
239   virtual AliVCaloCells* GetPHOSCells()              const { return fPHOSCells              ; }
240   
241   //-------------------------------------
242   // Event/track selection methods
243   //-------------------------------------
244   
245   void             AcceptFastClusterEvents()               { fAcceptFastCluster     = kTRUE  ; } 
246   void             RejectFastClusterEvents()               { fAcceptFastCluster     = kFALSE ; }  
247   Bool_t           IsFastClusterAccepted()           const { return fAcceptFastCluster       ; }   
248   
249   void             SwitchOnLEDEventsRemoval()              { fRemoveLEDEvents       = kTRUE  ; }
250   void             SwitchOffLEDEventsRemoval()             { fRemoveLEDEvents       = kFALSE ; }
251   Bool_t           IsLEDEventRemoved()               const { return fRemoveLEDEvents         ; }   
252   Bool_t           RejectLEDEvents();
253   
254   void             SetFiredTriggerClassName(TString name ) { fFiredTriggerClassName = name   ; }
255   TString          GetFiredTriggerClassName()        const { return fFiredTriggerClassName   ; }
256   TString          GetFiredTriggerClasses()          const { return GetInputEvent()->GetFiredTriggerClasses() ; }
257   
258   UInt_t           GetEventTriggerMask()             const { return fEventTriggerMask        ; }
259   void             SetEventTriggerMask(UInt_t evtTrig = AliVEvent::kAny) 
260                                                            { fEventTriggerMask = evtTrig     ; }
261         Bool_t           IsEventTriggerAtSEOn()            const { return fEventTriggerAtSE        ; }
262   void             SwitchOnEventTriggerAtSE()              { fEventTriggerAtSE      = kTRUE  ; }
263   void             SwitchOffEventTriggerAtSE()             { fEventTriggerAtSE      = kFALSE ; }
264                 
265         
266   TArrayI          GetTriggerPatches(Int_t tmin, Int_t tmax);
267   void             MatchTriggerCluster(TArrayI patches);
268
269   Bool_t           IsExoticEvent()                         { return fIsExoticEvent           ; }  
270   Bool_t           IsBadCellTriggerEvent()                 { return fIsBadCellEvent          ; }
271   Bool_t           IsBadMaxCellTriggerEvent()              { return fIsBadMaxCellEvent       ; }
272   Bool_t           IsTriggerMatched()                      { return fIsTriggerMatch          ; }
273   Bool_t           IsTriggerMatchedOpenCuts(Int_t i)       { return fIsTriggerMatchOpenCut[i]; }
274   
275   Int_t            GetTriggerClusterBC()                   { return fTriggerClusterBC        ; }
276   Int_t            GetTriggerClusterIndex()                { return fTriggerClusterIndex     ; }
277   Int_t            GetTriggerClusterId()                   { return fTriggerClusterId        ; }
278   
279   Float_t          GetEventTriggerThreshold()              { return fTriggerEventThreshold   ; }
280   void             SetEventTriggerThreshold(Float_t tr)    { fTriggerEventThreshold   = tr   ; }
281
282   void             SetTriggerPatchTimeWindow(Int_t min, Int_t max) { fTriggerPatchTimeWindow[0] = min ;
283                                                                      fTriggerPatchTimeWindow[1] = max ; }
284   
285   void             SwitchOffBadTriggerEventsRemoval()      { fRemoveBadTriggerEvents   = kFALSE ; }
286   void             SwitchOnBadTriggerEventsRemoval()       { fRemoveBadTriggerEvents   = kTRUE  ; }
287
288   void             SwitchOffTriggerPatchMatching()         { fTriggerPatchClusterMatch = kFALSE ; }
289   void             SwitchOnTriggerPatchMatching()          { fTriggerPatchClusterMatch = kTRUE  ; }
290
291   UInt_t           GetMixEventTriggerMask()             const { return fMixEventTriggerMask  ; }
292   void             SetMixEventTriggerMask(UInt_t evtTrig = AliVEvent::kAnyINT) 
293                                                            { fMixEventTriggerMask = evtTrig  ; }
294         void             SetEventTriggerBit();
295         Bool_t           IsEventMinimumBias()              const { return fEventTrigMinBias        ; }
296         Bool_t           IsEventCentral()                  const { return fEventTrigCentral        ; }
297         Bool_t           IsEventSemiCentral()              const { return fEventTrigSemiCentral    ; }
298         Bool_t           IsEventEMCALL0()                  const { return fEventTrigEMCALL0        ; }
299         Bool_t           IsEventEMCALL1Gamma1()            const { return fEventTrigEMCALL1Gamma1  ; }
300         Bool_t           IsEventEMCALL1Gamma2()            const { return fEventTrigEMCALL1Gamma2  ; }
301         Bool_t           IsEventEMCALL1Jet1()              const { return fEventTrigEMCALL1Jet1    ; }
302         Bool_t           IsEventEMCALL1Jet2()              const { return fEventTrigEMCALL1Jet2    ; }
303         Bool_t           IsEventEMCALL1Gamma()             const { return (fEventTrigEMCALL1Gamma1 || fEventTrigEMCALL1Gamma2) ; }
304   Bool_t           IsEventEMCALL1Jet()               const { return (fEventTrigEMCALL1Jet1   || fEventTrigEMCALL1Jet2  ) ; }
305         Bool_t           IsEventEMCALL1()                  const { return (IsEventEMCALL1Gamma()   || IsEventEMCALL1Jet()    ) ; }
306         
307         
308   void             SwitchOnEventSelection()                { fDoEventSelection      = kTRUE  ; }
309   void             SwitchOffEventSelection()               { fDoEventSelection      = kFALSE ; }
310   Bool_t           IsEventSelectionDone()            const { return fDoEventSelection        ; }
311   
312   void             SwitchOnV0ANDSelection()                { fDoV0ANDEventSelection = kTRUE  ; }
313   void             SwitchOffV0ANDSelection()               { fDoV0ANDEventSelection = kFALSE ; }
314   Bool_t           IsV0ANDEventSelectionDone()       const { return fDoV0ANDEventSelection   ; } 
315
316   void             SwitchOnVertexBCEventSelection()        { fDoVertexBCEventSelection = kTRUE  ; }
317   void             SwitchOffVertexBCEventSelection()       { fDoVertexBCEventSelection = kFALSE ; }
318   Bool_t           IsVertexBCEventSelectionDone()    const { return fDoVertexBCEventSelection   ; }
319   
320   void             SwitchOnPrimaryVertexSelection()        { fUseEventsWithPrimaryVertex = kTRUE  ; }
321   void             SwitchOffPrimaryVertexSelection()       { fUseEventsWithPrimaryVertex = kFALSE ; }
322   Bool_t           IsPrimaryVertexSelectionDone()    const { return fUseEventsWithPrimaryVertex   ; } 
323   
324   void             SwitchOnRejectNoTrackEvents()           { fDoRejectNoTrackEvents = kTRUE  ; }
325   void             SwitchOffRejectNoTrackEvents()          { fDoRejectNoTrackEvents = kFALSE ; }
326   Bool_t           IsEventWithNoTrackRejectionDone() const { return fDoRejectNoTrackEvents   ; }
327   
328
329   // Time Stamp
330   
331   Double_t         GetRunTimeStampMin()              const { return fTimeStampRunMin         ; }
332   Double_t         GetRunTimeStampMax()              const { return fTimeStampRunMax         ; }
333   
334   void             SetRunTimeStamp(Double_t a, Double_t b) { fTimeStampRunMin = a            ;
335                                                              fTimeStampRunMax = b            ; } // seconds
336   
337   Float_t          GetEventTimeStampFractionMin()    const { return fTimeStampEventFracMin   ; }
338   Float_t          GetEventTimeStampFractionMax()    const { return fTimeStampEventFracMax   ; }
339   
340   void             SetEventTimeStampFraction(Float_t a, Float_t b) { fTimeStampEventFracMin = a ;
341                                                                      fTimeStampEventFracMax = b ; }
342   
343   void             SwitchOnSelectEventTimeStamp()          { fTimeStampEventSelect = kTRUE   ; }
344   void             SwitchOffSelectEventTimeStamp()         { fTimeStampEventSelect = kFALSE  ; }
345   
346   Bool_t           IsSelectEventTimeStampOn()              {return  fTimeStampEventSelect    ; }
347   
348   Bool_t           IsPileUpFromSPD()               const ;
349   Bool_t           IsPileUpFromEMCal()             const ;
350   Bool_t           IsPileUpFromSPDAndEMCal()       const ;
351   Bool_t           IsPileUpFromSPDOrEMCal()        const ;
352   Bool_t           IsPileUpFromSPDAndNotEMCal()    const ;
353   Bool_t           IsPileUpFromEMCalAndNotSPD()    const ;
354   Bool_t           IsPileUpFromNotSPDAndNotEMCal() const ;
355
356   void             SetPileUpParamForSPD  (Int_t i, Double_t param)
357                                                            { fPileUpParamSPD[i]  = param  ; }
358   void             SetPileUpParamForEMCal(Int_t param)     { fNPileUpClustersCut = param  ; }
359   
360   Int_t            GetNPileUpClusters()                    { return  fNPileUpClusters     ; }
361   Int_t            GetNNonPileUpClusters()                 { return  fNNonPileUpClusters  ; }
362   
363   Int_t            GetEMCalEventBC(Int_t bc)     const     { if(bc >=0 && bc < 19) return  fEMCalBCEvent   [bc] ; else return 0 ; }
364   Int_t            GetTrackEventBC(Int_t bc)     const     { if(bc >=0 && bc < 19) return  fTrackBCEvent   [bc] ; else return 0 ; }
365   Int_t            GetEMCalEventBCcut(Int_t bc)  const     { if(bc >=0 && bc < 19) return  fEMCalBCEventCut[bc] ; else return 0 ; }
366   Int_t            GetTrackEventBCcut(Int_t bc)  const     { if(bc >=0 && bc < 19) return  fTrackBCEventCut[bc] ; else return 0 ; }
367
368   void             SetEMCalEventBC(Int_t bc)               { if(bc >=0 && bc < 19) fEMCalBCEvent   [bc] = 1 ; }
369   void             SetTrackEventBC(Int_t bc)               { if(bc >=0 && bc < 19) fTrackBCEvent   [bc] = 1 ; }
370   void             SetEMCalEventBCcut(Int_t bc)            { if(bc >=0 && bc < 19) fEMCalBCEventCut[bc] = 1 ; }
371   void             SetTrackEventBCcut(Int_t bc)            { if(bc >=0 && bc < 19) fTrackBCEventCut[bc] = 1 ; }
372
373   Int_t            GetVertexBC(const AliVVertex * vtx);
374   Int_t            GetVertexBC()                  const    { return fVertexBC              ; }
375   void             SwitchOnRecalculateVertexBC()           { fRecalculateVertexBC = kTRUE  ; }
376   void             SwitchOffRecalculateVertexBC()          { fRecalculateVertexBC = kFALSE ; }
377   
378   // Track selection
379   
380   ULong_t          GetTrackStatus()                  const { return fTrackStatus          ; }
381   void             SetTrackStatus(ULong_t bit)             { fTrackStatus = bit           ; }           
382
383   ULong_t          GetTrackFilterMask()              const {return fTrackFilterMask       ; }
384   void             SetTrackFilterMask(ULong_t bit)         { fTrackFilterMask = bit       ; }           
385   
386   AliESDtrackCuts* GetTrackCuts()                    const { return fESDtrackCuts         ; }
387   void             SetTrackCuts(AliESDtrackCuts * cuts)    ;
388
389   AliESDtrackCuts* GetTrackComplementaryCuts()       const { return fESDtrackComplementaryCuts ; }
390   void             SetTrackComplementaryCuts(AliESDtrackCuts * cuts)  ;
391
392   
393   void             SwitchOnConstrainTrackToVertex()        { fConstrainTrack     = kTRUE  ; } 
394   void             SwitchOffConstrainTrackToVertex()       { fConstrainTrack     = kFALSE ; }
395   
396   void             SwitchOnAODHybridTrackSelection()       { fSelectHybridTracks = kTRUE  ; } 
397   void             SwitchOffAODHybridTrackSelection()      { fSelectHybridTracks = kFALSE ; }      
398   
399   void             SwitchOnTrackHitSPDSelection()          { fSelectSPDHitTracks = kTRUE  ; }
400   void             SwitchOffTrackHitSPDSelection()         { fSelectSPDHitTracks = kFALSE ; }
401   
402   Int_t            GetTrackMultiplicity()            const { return fTrackMult            ; }
403   Float_t          GetTrackMultiplicityEtaCut()      const { return fTrackMultEtaCut      ; }
404   void             SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta       ; }           
405   
406   // Calorimeter specific and patches
407   void             AnalyzeOnlyLED()                        { fAnaLED             = kTRUE  ; }
408   void             AnalyzeOnlyPhysics()                    { fAnaLED             = kFALSE ; }
409   
410   //-------------------------------
411   // Vertex methods
412   //-------------------------------
413
414   virtual void      GetVertex(Double_t v[3])         const ;
415   virtual Double_t* GetVertex(const Int_t evtIndex)  const { return fVertex[evtIndex]            ; }
416   virtual void      GetVertex(Double_t vertex[3],    const Int_t evtIndex) const ;
417   virtual void      FillVertexArray();
418   virtual Bool_t    CheckForPrimaryVertex();
419   virtual Float_t   GetZvertexCut()                  const { return fZvtxCut                     ; } //cut on vertex position  
420   virtual void      SetZvertexCut(Float_t zcut=10.)        { fZvtxCut=zcut                       ; } //cut on vertex position
421
422   //--------------------------
423   // Centrality / Event Plane
424   //--------------------------
425
426   virtual AliCentrality* GetCentrality()             const { if(fDataType!=kMC) return fInputEvent->GetCentrality() ;
427                                                              else               return 0x0       ; } 
428   virtual void     SetCentralityClass(TString name)        { fCentralityClass   = name           ; }
429   virtual void     SetCentralityOpt(Int_t opt)             { fCentralityOpt     = opt            ; }
430   virtual TString  GetCentralityClass()              const { return fCentralityClass             ; }
431   virtual Int_t    GetCentralityOpt()                const { return fCentralityOpt               ; }
432   virtual Int_t    GetEventCentrality()              const ;
433   virtual void     SetCentralityBin(Int_t min, Int_t max) //Set the centrality bin to select the event. If used, then need to get percentile
434                                                            { fCentralityBin[0]=min; fCentralityBin[1]=max;  
435                                                              if(min>=0 && max > 0) fCentralityOpt = 100 ; }
436   virtual Float_t  GetCentralityBin(Int_t i)         const { if(i < 0 || i > 1) return 0 ; 
437                                                              else return fCentralityBin[i]              ; }
438   
439   virtual AliEventplane* GetEventPlane()             const { if(fDataType!=kMC) return fInputEvent->GetEventplane() ;
440                                                              else               return 0x0       ; }  
441   virtual Double_t       GetEventPlaneAngle()        const ;          
442   virtual void           SetEventPlaneMethod(TString m)    { fEventPlaneMethod = m               ; }
443   virtual TString        GetEventPlaneMethod()       const { return fEventPlaneMethod            ; }
444
445   //--------------------
446   // Mixing
447   //--------------------
448
449   Int_t   GetLastCaloMixedEvent()                    const { return fLastMixedCaloEvent          ; }
450   Int_t   GetLastTracksMixedEvent ()                 const { return fLastMixedTracksEvent        ; }
451   
452   TList * GetListWithMixedEventsForCalo  (Int_t bi)  const { if(fListMixedCaloEvents)   return fListMixedCaloEvents[bi]     ; else return 0 ; }
453   TList * GetListWithMixedEventsForTracks(Int_t bi)  const { if(fListMixedTracksEvents) return fListMixedTracksEvents [bi]  ; else return 0 ; }  
454    
455   Bool_t  ListWithMixedEventsForCaloExists()         const { if(fListMixedCaloEvents) return kTRUE  ;
456                                                              else                     return kFALSE ; }
457
458   Bool_t  ListWithMixedEventsForTracksExists()       const { if(fListMixedTracksEvents) return kTRUE  ;
459                                                              else                       return kFALSE ; }
460   
461   void    SetLastCaloMixedEvent  (Int_t e)                 { fLastMixedCaloEvent    = e          ; }
462   void    SetLastTracksMixedEvent(Int_t e)                 { fLastMixedTracksEvent  = e          ; }
463   
464   void    SetListWithMixedEventsForCalo (TList ** l)       { 
465             if(fListMixedCaloEvents) printf("AliCaloTrackReader::SetListWithMixedEventsForCalo() - Track Mixing event list already set, nothing done\n");
466             else                        fListMixedCaloEvents    = l ; }
467   
468   void    SetListWithMixedEventsForTracks(TList ** l)      { 
469             if(fListMixedTracksEvents)  printf("AliCaloTrackReader::SetListWithMixedEventsForTracks() - Calorimeter Mixing event list already set, nothing done\n");
470             else                        fListMixedTracksEvents  = l ; }
471   
472   //-------------------------------------
473   // Other methods
474   //-------------------------------------
475   
476   AliCalorimeterUtils * GetCaloUtils()               const { return fCaloUtils                   ; }
477   void             SetCaloUtils(AliCalorimeterUtils * caloutils)  { fCaloUtils = caloutils       ; }  
478   
479   virtual Double_t GetBField()                       const { return fInputEvent->GetMagneticField()  ; } 
480   
481   void    SetImportGeometryFromFile(Bool_t import, 
482                                     TString path = "")     { 
483                                                              fImportGeometryFromFile = import    ; 
484                                                              fImportGeometryFilePath = path      ; }
485   
486   //------------------------------------------------
487   // MC analysis specific methods
488   //-------------------------------------------------
489   
490   // Kinematics and galice.root available
491   
492   virtual AliStack*          GetStack()              const ;
493   virtual AliHeader*         GetHeader()             const ;
494   virtual AliGenEventHeader* GetGenEventHeader()     const ;
495   
496   // Filtered kinematics in AOD
497   
498   virtual TClonesArray*     GetAODMCParticles()      const ;
499   virtual AliAODMCHeader*   GetAODMCHeader   ()      const ;
500   
501   virtual AliVEvent*        GetInputEvent()          const { return fInputEvent            ; }
502   virtual AliVEvent*        GetOriginalInputEvent()  const { return 0x0                    ; }
503   virtual AliAODEvent*      GetOutputEvent()         const { return fOutputEvent           ; }
504   virtual AliMCEvent*       GetMC()                  const { return fMC                    ; }
505   virtual AliMixedEvent*    GetMixedEvent()          const { return fMixedEvent            ; }
506   virtual Int_t             GetNMixedEvent()         const { return fNMixedEvent           ; } 
507   
508   void             SwitchOnStack()                         { fReadStack          = kTRUE   ; }
509   void             SwitchOffStack()                        { fReadStack          = kFALSE  ; }
510   void             SwitchOnAODMCParticles()                { fReadAODMCParticles = kTRUE   ; }
511   void             SwitchOffAODMCParticles()               { fReadAODMCParticles = kFALSE  ; }
512   Bool_t           ReadStack()                       const { return fReadStack             ; }
513   Bool_t           ReadAODMCParticles()              const { return fReadAODMCParticles    ; }
514         
515   void             RemapMCLabelForAODs(Int_t &label);
516   
517   // Select generated events, depending on comparison of pT hard and jets
518     
519   virtual Bool_t   ComparePtHardAndJetPt() ;
520   virtual Bool_t   IsPtHardAndJetPtComparisonSet()       const { return  fComparePtHardAndJetPt   ; }
521   virtual void     SetPtHardAndJetPtComparison(Bool_t compare) { fComparePtHardAndJetPt = compare ; }   
522   virtual Float_t  GetPtHardAndJetFactor()               const { return  fPtHardAndJetPtFactor    ; }
523   virtual void     SetPtHardAndJetPtFactor(Float_t factor)     { fPtHardAndJetPtFactor = factor   ; }           
524   
525   virtual Bool_t   ComparePtHardAndClusterPt() ;
526   virtual Bool_t   IsPtHardAndClusterPtComparisonSet()       const { return  fComparePtHardAndClusterPt   ; }
527   virtual void     SetPtHardAndClusterPtComparison(Bool_t compare) { fComparePtHardAndClusterPt = compare ; }   
528   virtual Float_t  GetPtHardAndClusterFactor()               const { return  fPtHardAndClusterPtFactor    ; }
529   virtual void     SetPtHardAndClusterPtFactor(Float_t factor)     { fPtHardAndClusterPtFactor = factor   ; }           
530   
531   virtual Bool_t   IsHIJINGLabel(const Int_t label);
532   void             SetGeneratorMinMaxParticles();
533   void             SwitchOnAcceptOnlyHIJINGLabels()          { fAcceptOnlyHIJINGLabels = kTRUE  ; }
534   void             SwitchOffAcceptOnlyHIJINGLabels()         { fAcceptOnlyHIJINGLabels = kFALSE ; }
535   Bool_t           AcceptOnlyHIJINGLabels()            const { return fAcceptOnlyHIJINGLabels   ; }
536   
537   // MC reader methods, declared there to allow compilation, they are only used in the MC reader
538   
539   virtual void AddNeutralParticlesArray(TArrayI & /*array*/) { ; }  
540   virtual void AddChargedParticlesArray(TArrayI & /*array*/) { ; } 
541   virtual void AddStatusArray(TArrayI & /*array*/)           { ; }
542   
543   virtual void SwitchOnPi0Decay()                            { ; } 
544   virtual void SwitchOffPi0Decay()                           { ; } 
545   virtual void SwitchOnStatusSelection()                     { ; }
546   virtual void SwitchOffStatusSelection()                    { ; }
547   virtual void SwitchOnOverlapCheck()                        { ; }
548   virtual void SwitchOffOverlapCheck()                       { ; }
549   virtual void SwitchOnOnlyGeneratorParticles()              { ; }
550   virtual void SwitchOffOnlyGeneratorParticles()             { ; }
551
552   virtual void SetEMCALOverlapAngle(Float_t /*angle*/)       { ; }
553   virtual void SetPHOSOverlapAngle(Float_t /*angle*/)        { ; }
554
555   //-------------
556   // Jets
557   //-------------
558   Bool_t       IsNonStandardJetsSwitchedOn()           const { return fFillInputNonStandardJetBranch   ; }
559   void         SwitchOnNonStandardJets()                     { fFillInputNonStandardJetBranch = kTRUE  ; }
560   void         SwitchOffNonStandardJets()                    { fFillInputNonStandardJetBranch = kFALSE ; }
561   
562   virtual void FillInputNonStandardJets() ;
563   virtual TClonesArray* GetNonStandardJets()            const { return fNonStandardJets                 ; }
564   virtual void SetInputNonStandardJetBranchName(TString name) { fInputNonStandardJetBranchName   = name ; }
565   virtual TString GetInputNonStandardJetBranchName()          { return fInputNonStandardJetBranchName   ; }
566   
567  protected:
568   Int_t            fEventNumber;               // Event number
569   Int_t            fDataType ;                 // Select MC:Kinematics, Data:ESD/AOD, MCData:Both
570   Int_t            fDebug;                     // Debugging level
571   AliFiducialCut * fFiducialCut;               // Acceptance cuts
572   Bool_t           fCheckFidCut ;              // Do analysis for clusters in defined region         
573
574   Bool_t           fComparePtHardAndJetPt;     // In MonteCarlo, jet events, reject fake events with wrong jet energy.
575   Float_t          fPtHardAndJetPtFactor;      // Factor between ptHard and jet pT to reject/accept event.
576
577   Bool_t           fComparePtHardAndClusterPt; // In MonteCarlo, jet events, reject events with too large cluster energy
578   Float_t          fPtHardAndClusterPtFactor;  // Factor between ptHard and cluster pT to reject/accept event.
579   
580   Float_t          fCTSPtMin;                  // pT Threshold on charged particles 
581   Float_t          fEMCALPtMin;                // pT Threshold on emcal clusters
582   Float_t          fPHOSPtMin;                 // pT Threshold on phos clusters
583   Float_t          fCTSPtMax;                  // pT Threshold on charged particles 
584   Float_t          fEMCALPtMax;                // pT Threshold on emcal clusters
585   Float_t          fPHOSPtMax;                 // pT Threshold on phos clusters
586   Bool_t           fUseEMCALTimeCut;           // Do time cut selection
587   Bool_t           fUseParamTimeCut;           // Use simple or parametrized time cut
588   Bool_t           fUseTrackTimeCut;           // Do time cut selection
589   Double_t         fEMCALTimeCutMin;           // Remove clusters/cells with time smaller than this value, in ns
590   Double_t         fEMCALTimeCutMax;           // Remove clusters/cells with time larger than this value, in ns
591   Float_t          fEMCALParamTimeCutMin[4];   // Remove clusters/cells with time smaller than parametrized value, in ns
592   Double_t         fEMCALParamTimeCutMax[4];   // Remove clusters/cells with time larger than parametrized value, in ns
593   Double_t         fTrackTimeCutMin;           // Remove tracks with time smaller than this value, in ns
594   Double_t         fTrackTimeCutMax;           // Remove tracks with time larger than this value, in ns
595   Bool_t           fUseTrackDCACut;            // Do DCA selection
596   Double_t         fTrackDCACut[3];            // Remove tracks with DCA larger than cut, parameters of function stored here
597
598   TList          * fAODBranchList ;            //-> List with AOD branches created and needed in analysis
599   TObjArray      * fCTSTracks ;                //-> temporal array with tracks
600   TObjArray      * fEMCALClusters ;            //-> temporal array with EMCAL CaloClusters
601   TObjArray      * fPHOSClusters ;             //-> temporal array with PHOS  CaloClusters
602   AliVCaloCells  * fEMCALCells ;               //! temporal array with EMCAL CaloCells
603   AliVCaloCells  * fPHOSCells ;                //! temporal array with PHOS  CaloCells
604
605   AliVEvent      * fInputEvent;                //! pointer to esd or aod input
606   AliAODEvent    * fOutputEvent;               //! pointer to aod output
607   AliMCEvent     * fMC;                        //! Monte Carlo Event Handler  
608
609   Bool_t           fFillCTS;                   // use data from CTS
610   Bool_t           fFillEMCAL;                 // use data from EMCAL
611   Bool_t           fFillPHOS;                  // use data from PHOS
612   Bool_t           fFillEMCALCells;            // use data from EMCAL
613   Bool_t           fFillPHOSCells;             // use data from PHOS
614   Bool_t           fRecalculateClusters;       // Correct clusters, recalculate them if recalibration parameters is given
615   Bool_t           fSelectEmbeddedClusters;    // Use only simulated clusters that come from embedding.
616   
617   ULong_t          fTrackStatus        ;       // Track selection bit, select tracks refitted in TPC, ITS ...
618   ULong_t          fTrackFilterMask    ;       // Track selection bit, for AODs (any difference with track status?)
619   AliESDtrackCuts *fESDtrackCuts       ;       // Track cut
620   AliESDtrackCuts *fESDtrackComplementaryCuts; // Track cut, complementary cuts for hybrids
621   Bool_t           fConstrainTrack     ;       // Constrain Track to vertex
622   Bool_t           fSelectHybridTracks ;       // Select CTS tracks of type hybrid (only for AODs)
623   Bool_t           fSelectSPDHitTracks ;       // Ensure that track hits SPD layers
624   Int_t            fTrackMult          ;       // Track multiplicity
625   Float_t          fTrackMultEtaCut    ;       // Track multiplicity eta cut
626   Bool_t           fReadStack          ;       // Access kine information from stack
627   Bool_t                 fReadAODMCParticles ;       // Access kine information from filtered AOD MC particles
628         
629   TString          fDeltaAODFileName   ;       // Delta AOD file name
630   TString          fFiredTriggerClassName;     // Name of trigger event type used to do the analysis
631
632         // Trigger bit
633   UInt_t           fEventTriggerMask ;         // select this triggerered event
634   UInt_t           fMixEventTriggerMask ;      // select this triggerered event for mixing, tipically kMB or kAnyINT
635   Bool_t           fEventTriggerAtSE;          // select triggered event at SE base task or here
636   
637         Bool_t           fEventTrigMinBias ;         // Event is min bias on its name, it should correspond to AliVEvent::kMB, AliVEvent::kAnyInt
638         Bool_t           fEventTrigCentral ;         // Event is AliVEvent::kCentral on its name,  it should correspond to PbPb
639         Bool_t           fEventTrigSemiCentral ;     // Event is AliVEvent::kSemiCentral on its name,  it should correspond to PbPb 
640         Bool_t           fEventTrigEMCALL0 ;         // Event is EMCal L0 on its name, it should correspond to AliVEvent::kEMC7, AliVEvent::kEMC1
641         Bool_t           fEventTrigEMCALL1Gamma1 ;   // Event is L1-Gamma, threshold 1 on its name,  it should correspond kEMCEGA
642         Bool_t           fEventTrigEMCALL1Gamma2 ;   // Event is L1-Gamma, threshold 2 on its name,  it should correspond kEMCEGA  
643         Bool_t           fEventTrigEMCALL1Jet1 ;     // Event is L1-Gamma, threshold 1 on its name,  it should correspond kEMCEGA
644         Bool_t           fEventTrigEMCALL1Jet2 ;     // Event is L1-Gamma, threshold 2 on its name,  it should correspond kEMCEGA  
645         
646         Int_t            fBitEGA;                    // Trigger bit on VCaloTrigger for EGA
647         Int_t            fBitEJE;                    // Trigger bit on VCaloTrigger for EJE
648         
649   Bool_t           fAnaLED;                    // Analyze LED data only.
650
651   TString          fTaskName;                  // Name of task that executes the analysis
652         
653   AliCalorimeterUtils * fCaloUtils ;           //  Pointer to CalorimeterUtils
654
655   AliMixedEvent  * fMixedEvent  ;              //! mixed event object. This class is not the owner
656   Int_t            fNMixedEvent ;              // number of events in mixed event buffer
657   Double_t      ** fVertex      ;              //! vertex array 3 dim for each mixed event buffer
658   
659   TList **         fListMixedTracksEvents ;    //! Container for tracks stored for different events, used in case of own mixing, set in analysis class
660   TList **         fListMixedCaloEvents;       //! Container for photon stored for different events, used in case of own mixing, set in analysis class
661   Int_t            fLastMixedTracksEvent  ;    //  Temporary container with the last event added to the mixing list for tracks
662   Int_t            fLastMixedCaloEvent ;       //  Temporary container with the last event added to the mixing list for photons
663   
664   Bool_t           fWriteOutputDeltaAOD;       // Write the created delta AOD objects into file  
665         Bool_t           fOldAOD;                    // Old AODs, before revision 4.20
666   
667   Int_t            fV0ADC[2]    ;              // Integrated V0 signal
668   Int_t            fV0Mul[2]    ;              // Integrated V0 Multiplicity
669
670   TString          fEMCALClustersListName;     // Alternative list of clusters produced elsewhere and not from InputEvent
671   
672   // Event selection
673   Float_t          fZvtxCut ;                      // Cut on vertex position
674   Bool_t           fAcceptFastCluster;           // Accept events from fast cluster, exclude these events for LHC11a
675   Bool_t           fRemoveLEDEvents;             // Remove events where LED was wrongly firing - EMCAL LHC11a
676   
677   Bool_t           fRemoveBadTriggerEvents;      // Remove triggered events because trigger was exotic, bad, or out of BC
678   Bool_t           fTriggerPatchClusterMatch;    // Search for the trigger patch and check if associated cluster was the trigger
679   Int_t            fTriggerPatchTimeWindow[2];   // Trigger patch selection window
680   Float_t          fTriggerEventThreshold;       // Threshold to look for triggered events
681   Int_t            fTriggerClusterBC;            // Event triggered by a cluster in BC -5 0 to 5
682   Int_t            fTriggerClusterIndex;         // Index in clusters array of trigger cluster
683   Int_t            fTriggerClusterId;            // Id of trigger cluster (cluster->GetID())
684   Bool_t           fIsExoticEvent;               // Exotic trigger event flag
685   Bool_t           fIsBadCellEvent;              // Bad cell triggered event flag, any cell in cluster is bad
686   Bool_t           fIsBadMaxCellEvent;           // Bad cell triggered event flag, only max energy cell is bad
687   Bool_t           fIsTriggerMatch;              // Could match the event to a trigger patch?
688   Bool_t           fIsTriggerMatchOpenCut[3];    // Could not match the event to a trigger patch?, retry opening cuts
689
690   
691   Bool_t           fDoEventSelection;            // Select events depending on V0, pileup, vertex well reconstructed, at least 1 track ...
692   Bool_t           fDoV0ANDEventSelection;       // Select events depending on V0, fDoEventSelection should be on
693   Bool_t           fDoVertexBCEventSelection;    // Select events with vertex on BC=0 or -100
694   Bool_t           fDoRejectNoTrackEvents;       // Reject events with no selected tracks in event
695   Bool_t           fUseEventsWithPrimaryVertex ; // Select events with primary vertex
696   AliTriggerAnalysis* fTriggerAnalysis;          // Access to trigger selection algorithm for V0AND calculation
697   
698   Bool_t           fTimeStampEventSelect;        // Select events within a fraction of data taking time
699   Float_t          fTimeStampEventFracMin;       // Minimum value of time stamp fraction event
700   Float_t          fTimeStampEventFracMax;       // Maximum value of time stamp fraction event
701   Double_t         fTimeStampRunMin;             // Minimum value of time stamp in run
702   Double_t         fTimeStampRunMax;             // Maximum value of time stamp in run
703   
704   Double_t         fPileUpParamSPD[5];           // Parameters to pass to method IsPileupFromSPD: Int_t minContributors,
705                                                  // Double_t minZdist, 
706                                                  // Double_t nSigmaZdist, 
707                                                  // Double_t nSigmaDiamXY, 
708                                                  // Double_t nSigmaDiamZ)
709   
710   // Pile-up in EMCal
711   Int_t            fNPileUpClusters;             // Number of clusters with time avobe 20 ns
712   Int_t            fNNonPileUpClusters;          // Number of clusters with time below 20 ns
713   Int_t            fNPileUpClustersCut;          // Cut to select event as pile-up
714   Int_t            fEMCalBCEvent[19];            // Fill one entry per event if there is a cluster in a given BC
715   Int_t            fEMCalBCEventCut[19];         // Fill one entry per event if there is a cluster in a given BC, depend on cluster E, acceptance cut
716   Int_t            fTrackBCEvent[19];            // Fill one entry per event if there is a track in a given BC
717   Int_t            fTrackBCEventCut[19];         // Fill one entry per event if there is a track in a given BC, depend on track pT, acceptance cut
718   Int_t            fVertexBC;                    // Vertex BC
719   Bool_t           fRecalculateVertexBC;         // Recalculate vertex BC from tracks pointing to vertex
720   
721   //Centrality/Event plane
722   TString          fCentralityClass;            // Name of selected centrality class     
723   Int_t            fCentralityOpt;              // Option for the returned value of the centrality, possible options 5, 10, 100
724   Int_t            fCentralityBin[2];           // Minimum and maximum value of the centrality for the analysis
725   TString          fEventPlaneMethod;           // Name of event plane method, by default "Q"
726   
727   Bool_t           fImportGeometryFromFile;     // Import geometry settings in geometry.root file
728   TString          fImportGeometryFilePath;     // path fo geometry.root file
729
730   Bool_t           fAcceptOnlyHIJINGLabels;     // Select clusters or tracks that where generated by HIJING, reject other generators in case of cocktail
731   Int_t            fNMCProducedMin;             // In case of cocktail, select particles in the list with label from this value
732   Int_t            fNMCProducedMax;             // In case of cocktail, select particles in the list with label up to this value
733   
734   // jets
735   
736   Bool_t           fFillInputNonStandardJetBranch;  // Flag to use data from non standard jets
737   TClonesArray *   fNonStandardJets;                //! temporal array with jets
738   TString          fInputNonStandardJetBranchName;  // Name of non standard jet branch
739   
740   AliCaloTrackReader(              const AliCaloTrackReader & r) ; // cpy ctor
741   AliCaloTrackReader & operator = (const AliCaloTrackReader & r) ; // cpy assignment
742   
743   ClassDef(AliCaloTrackReader,59)
744   
745 } ;
746
747
748 #endif //ALICALOTRACKREADER_H
749
750
751