Reconstruction of raw data from beam test 2006 (B.Polichtchouk)
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGetter.h
1 #ifndef ALIPHOSGETTER_H
2 #define ALIPHOSGETTER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //_________________________________________________________________________
9 //  A singleton that returns various objects 
10 //  Should be used on the analysis stage to avoid confusing between different
11 //  branches of reconstruction tree: e.g. reading RecPoints and TS made from 
12 //  another set of RecPoints.
13 // 
14 //  The objects are retrived from folders.  
15 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
16 //    
17
18
19 // --- ROOT system ---
20 #include "TObject.h"  
21 class TParticle ;
22 class TTree ; 
23 class TGraph ; 
24 class TF1 ; 
25
26 // --- Standard library ---
27
28 // --- AliRoot header files ---
29 #include "AliConfig.h" 
30 #include "AliPHOSLoader.h" 
31 #include "AliPHOSHit.h" 
32 #include "AliPHOSDigit.h"
33 #include "AliPHOSEmcRecPoint.h" 
34 #include "AliPHOSCpvRecPoint.h" 
35 #include "AliPHOSTrackSegment.h" 
36 #include "AliPHOSRecParticle.h" 
37 #include "AliPHOSDigitizer.h"
38 #include "AliPHOSSDigitizer.h"
39 #include "AliPHOSCalibData.h"
40
41 class AliPHOS ;  
42 class AliPHOSGeometry ;
43 class AliPHOSClusterizer ;
44 class AliPHOSTrackSegmentMaker ;  
45 class AliPHOSPID ; 
46 class AliPHOSBeamTestEvent ;
47 class AliESD ; 
48 class AliRawReader ;
49
50 class AliPHOSGetter : public TObject {
51   
52 public:  
53   // ctor: this is a singleton, the ctor should never be called but cint needs it as public
54   AliPHOSGetter() ;
55
56 public:
57   AliPHOSGetter(const AliPHOSGetter & obj) ;
58   AliPHOSGetter & operator = (const AliPHOSGetter & ) {
59     // assignement operator requested by coding convention, but not needed
60     Fatal("operator =", "not implemented") ;
61     return *this ; 
62   }
63   virtual ~AliPHOSGetter() ; 
64   
65   //=========== Instantiators ================
66   static AliPHOSGetter * Instance(const char* headerFile,
67                                   const char* version = AliConfig::GetDefaultEventFolderName(),
68                                   Option_t * openingOption = "READ" ) ; 
69   static AliPHOSGetter * Instance() ; 
70   
71   void Print(const Option_t *)const{}
72   static void Print() ; 
73   
74   //=========== General information about run ==============
75   virtual Bool_t IsLoaded(TString tree) const { return fLoadingStatus.Contains(tree) ; } 
76   virtual void   SetLoaded(TString tree) { fLoadingStatus += tree ; } 
77   
78   virtual Int_t  MaxEvent() const ; 
79   virtual Int_t  EventNumber() const ; 
80   virtual Bool_t VersionExists(TString & opt) const ; 
81   virtual UShort_t EventPattern(void) const ; 
82   virtual Float_t  BeamEnergy(void) const ;
83   
84   //========== PHOSGeometry and PHOS ============= 
85   virtual AliPHOS *         PHOS() const  ;  
86   virtual AliPHOSGeometry * PHOSGeometry() const ; 
87   
88   //========== Methods to read something from file ==========
89   virtual void   Event(Int_t event, const char * opt = "HSDRTP") ;    
90   void   Event(AliRawReader *rawReader, const char * opt = "W",Bool_t isOldRCUFormat = kFALSE) ;    
91   virtual void   Track(Int_t itrack) ;
92  
93   
94   //-----------------now getter's data--------------------------------------
95   AliPHOSCalibrationDB * CalibrationDB(){return  fcdb; }
96   void ReadCalibrationDB(const char * /*name*/, const char * /*filename*/){ ;}
97   void SetCalibrationDB(AliPHOSCalibrationDB * cdb) {fcdb = cdb ;}
98   
99   void SetCalibData(AliPHOSCalibData* calibda) { fgCalibData = calibda; }
100   AliPHOSCalibData * CalibData();
101
102   //=========== Primaries ============
103   virtual TClonesArray *    Primaries(void) ;
104   virtual TParticle * Primary(Int_t index) const ;
105   virtual Int_t       NPrimaries()const { return fNPrimaries; }
106   virtual TParticle * Secondary(const TParticle * p, Int_t index=1) const ;  
107   
108   //=========== Hits =================
109   virtual TClonesArray *  Hits(void) const ; 
110   virtual AliPHOSHit *    Hit(Int_t index) const { return dynamic_cast<AliPHOSHit*>(Hits()->At(index) );}
111   virtual TTree *         TreeH() const ; 
112   
113   //=========== SDigits ==============
114   virtual TClonesArray *      SDigits() const ;  
115   virtual AliPHOSDigit *      SDigit(Int_t index) const { return static_cast<AliPHOSDigit *>(SDigits()->At(index)) ;} 
116   virtual TTree *             TreeS() const ; 
117   virtual AliPHOSSDigitizer * SDigitizer() ;  
118   
119   virtual TString             GetSDigitsFileName() const { return PhosLoader()->GetSDigitsFileName() ; }  
120   virtual Int_t               LoadSDigits(Option_t* opt="") const { return PhosLoader()->LoadSDigits(opt) ; }
121   virtual Int_t               LoadSDigitizer(Option_t* opt="") const { return  PhosLoader()->LoadSDigitizer(opt) ; }
122   virtual Int_t               WriteSDigits(Option_t* opt="") const  { return PhosLoader()->WriteSDigits(opt) ; }
123   virtual Int_t               WriteSDigitizer(Option_t* opt="") const {
124     return  PhosLoader()->WriteSDigitizer(opt) ; }
125   
126   //========== Digits ================
127   virtual TClonesArray * Digits() const ;
128   virtual AliPHOSDigit * Digit(Int_t index) const { return static_cast<AliPHOSDigit *>(Digits()->At(index)) ;} 
129   virtual TTree *        TreeD() const ; 
130   virtual AliPHOSDigitizer * Digitizer() ;
131   virtual TString             GetDigitsFileName() const { return PhosLoader()->GetDigitsFileName() ; }  
132   virtual Int_t               LoadDigits(Option_t* opt="") const { return PhosLoader()->LoadDigits(opt) ; }
133   virtual Int_t               LoadDigitizer(Option_t* opt="") const {
134     return  PhosLoader()->LoadDigitizer(opt) ; }
135   virtual Int_t               WriteDigits(Option_t* opt="") const { return PhosLoader()->WriteDigits(opt) ; }
136   virtual Int_t               WriteDigitizer(Option_t* opt="") const {
137     return  PhosLoader()->WriteDigitizer(opt) ; }
138
139   //Methods to distinguish raw and simulated digits
140   virtual Bool_t              IsRawDigits(void) const {return fRawDigits;}
141   virtual void                SetRawDigits(Bool_t isRaw = kTRUE){fRawDigits = isRaw;}
142   
143   //========== RecPoints =============
144   virtual TObjArray *           EmcRecPoints() const;
145   virtual AliPHOSEmcRecPoint *  EmcRecPoint(Int_t index) const { return static_cast<AliPHOSEmcRecPoint *>(EmcRecPoints()->At(index)) ;} 
146   virtual TObjArray *           CpvRecPoints() const ; 
147   virtual AliPHOSCpvRecPoint *  CpvRecPoint(Int_t index) const { return static_cast<AliPHOSCpvRecPoint *>(CpvRecPoints()->At(index)) ;} 
148   virtual TTree *               TreeR() const ;
149   virtual AliPHOSClusterizer * Clusterizer() ;
150   virtual TString               GetRecPointsFileName() const { return PhosLoader()->GetRecPointsFileName() ; } 
151   virtual Int_t                 LoadRecPoints(Option_t* opt="") const { return PhosLoader()->LoadRecPoints(opt) ; }
152   virtual Int_t                 LoadClusterizer(Option_t* opt="") const {
153     return  PhosLoader()->LoadClusterizer(opt) ; }
154   virtual Int_t                 WriteRecPoints(Option_t* opt="") const { return PhosLoader()->WriteRecPoints(opt) ; }
155   virtual Int_t                 WriteClusterizer(Option_t* opt="") const {
156     return  PhosLoader()->WriteClusterizer(opt) ; }
157   
158   //========== TrackSegments   TClonesArray * TrackSegments(const char * name = 0) { 
159   virtual TClonesArray *           TrackSegments() const;
160   virtual AliPHOSTrackSegment *  TrackSegment(Int_t index) const { return static_cast<AliPHOSTrackSegment *>(TrackSegments()->At(index)) ;} 
161   virtual TTree *               TreeT() const ;
162   virtual AliPHOSTrackSegmentMaker * TrackSegmentMaker() ;
163   virtual TString               GetTracksFileName() const { return PhosLoader()->GetTracksFileName() ; } 
164   virtual Int_t                 LoadTracks(Option_t* opt="") const { return PhosLoader()->LoadTracks(opt) ; }
165   virtual Int_t                 LoadTrackSegementMaker(Option_t* opt="") const {
166     return  PhosLoader()->LoadTrackSegmentMaker(opt) ; }
167   virtual Int_t                 WriteTracks(Option_t* opt="") const { return PhosLoader()->WriteTracks(opt) ; }
168   virtual Int_t                 WriteTrackSegmentMaker(Option_t* opt="") const {
169     return  PhosLoader()->WriteTracker(opt) ; }
170   
171   //========== RecParticles ===========
172   virtual TClonesArray *         RecParticles() const;
173   virtual AliPHOSRecParticle *   RecParticle(Int_t index) const { return static_cast<AliPHOSRecParticle *>(RecParticles()->At(index)) ;} 
174   virtual TTree *               TreeP() const ;
175   virtual AliPHOSPID * PID() ;
176   virtual TString               GetRecParticlesFileName() const { return PhosLoader()->GetRecParticlesFileName() ; } 
177   virtual Int_t                 LoadRecParticles(Option_t* opt="") const { return PhosLoader()->LoadRecParticles(opt) ; }
178   virtual Int_t                 LoadPID(Option_t* opt="") const {
179     return  PhosLoader()->LoadPID(opt) ; }
180   virtual Int_t                 WriteRecParticles(Option_t* opt="") const { return PhosLoader()->WriteRecParticles(opt) ; }
181   virtual Int_t                 WritePID(Option_t* opt="") const {
182     return  PhosLoader()->WritePID(opt) ; }
183
184   //========== Raw ===========
185   virtual Int_t ReadRaw(AliRawReader *rawReader,Bool_t isOldRCUFormat) ; 
186
187   void SetDebug(Int_t level) {fgDebug = level;} // Set debug level 
188   virtual void PostClusterizer(AliPHOSClusterizer * clu) 
189     const{PhosLoader()->PostClusterizer(clu) ; }
190   virtual void PostPID(AliPHOSPID * pid) 
191     const{PhosLoader()->PostPID(pid) ; }
192   virtual void PostTrackSegmentMaker(AliPHOSTrackSegmentMaker * tr) 
193     const{PhosLoader()->PostTrackSegmentMaker(tr) ; }
194   virtual void PostSDigitizer (AliPHOSSDigitizer * sdigitizer) 
195     const {PhosLoader()->PostSDigitizer(sdigitizer);}    
196   virtual void PostDigitizer (AliPHOSDigitizer * digitizer)    
197     const {PhosLoader()->PostDigitizer(digitizer);}
198   
199   virtual TString Version() const  { return PhosLoader()->GetTitle() ; } 
200   virtual AliPHOSLoader * PhosLoader() const { return  fgPhosLoader ; }
201   virtual void Reset() ;
202   
203   virtual AliESD * ESD() const { return fESD ; }
204   
205 protected :
206   AliPHOSGetter(Int_t /*i*/) ;
207   
208 protected:
209   static AliPHOSGetter * fgObjGetter; // pointer to the unique instance of the singleton 
210   
211 private:
212   AliPHOSGetter(const char* headerFile,
213                 const char* version = AliConfig::GetDefaultEventFolderName(),
214                 Option_t * openingOption = "READ") ;
215 private:
216   
217   Int_t ReadTreeD(void) const ;
218   Int_t ReadTreeH(void) const ;
219   Int_t ReadTreeR(void) const ;
220   Int_t ReadTreeT(void) const ;
221   Int_t ReadTreeS(void) const ;
222   Int_t ReadTreeP(void) const ;
223
224   Int_t ReadTreeE(Int_t event) ;    
225   Bool_t OpenESDFile() ;
226   void ReadPrimaries(void) ;
227
228   void FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time) const; 
229
230   Int_t CalibrateRaw (Double_t energy, Int_t *relId);
231
232 private:
233   
234   AliPHOSBeamTestEvent * fBTE ;           //! Header if BeamTest Event
235   static Int_t          fgDebug ;             //! Debug level
236   
237   TString           fLoadingStatus ;     //! tells which trees are loaded
238   Int_t             fNPrimaries ;        //! # of primaries  
239   TClonesArray *    fPrimaries ;         //! list of lists of primaries
240   TFile *           fESDFile ;           //! ESD file
241   TString           fESDFileName ;       //! ESD File Name
242   AliESD *          fESD ;               //! ESD object
243   TTree *           fESDTree ;           //! ESD Tree
244   
245   Bool_t            fRawDigits ;         //! true is raw data
246
247   AliPHOSCalibrationDB * fcdb ;          //! Calibration DB for beam test run 2004
248   static AliPHOSCalibData * fgCalibData; //! instance of AliPHOSCalibData
249
250   static AliPHOSLoader * fgPhosLoader ; // the loader for the NewIO
251   
252   enum EDataTypes{kHits,kSDigits,kDigits,kRecPoints,kTracks,kNDataTypes};
253
254   
255   ClassDef(AliPHOSGetter,2)  // Algorithm class that provides methods to retrieve objects from a list knowing the index 
256     
257     };
258
259 #endif // AliPHOSGETTER_H