Fast implementation of gamma-distributed random numbers (Andreas)
[u/mrichter/AliRoot.git] / ZDC / AliZDCReconstructor.h
1 #ifndef ALIZDCRECONSTRUCTOR_H
2 #define ALIZDCRECONSTRUCTOR_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 //                                         //
10 //       class for ZDC reconstruction      //
11 //                                         //
12 /////////////////////////////////////////////
13
14 #include "AliReconstructor.h"
15 #include "AliZDCRecoParam.h"
16 #include "AliESDZDC.h"
17
18 class AliCDBManager;
19 class AliCDBStorage;
20 class AliZDCPedestals;
21 class AliZDCEnCalib;
22 class AliZDCSaturationCalib;
23 class AliZDCTowerCalib;
24 class AliZDCMBCalib;
25 class AliZDCTDCCalib;
26 class AliZDCRecoParampp;
27 class AliZDCRecoParamPbPb;
28 class AliLog;
29 class AliLoader;
30
31 class AliZDCReconstructor: public AliReconstructor {
32 public:
33   AliZDCReconstructor();
34   virtual ~AliZDCReconstructor();
35
36   virtual void   Init();
37   virtual void   Init(TString beamType, Float_t beamEnergy);
38   virtual Bool_t HasDigitConversion() const {return kFALSE;};
39   
40   virtual void Reconstruct(TTree*digitsTree, TTree* clustersTree) const; 
41   virtual void Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const;
42
43   virtual void FillESD(TTree* /*digitsTree*/, TTree* clustersTree, 
44                        AliESDEvent* esd) const {FillZDCintoESD(clustersTree, esd);}
45   virtual void FillESD(AliRawReader* /*rawReader*/, TTree* clustersTree, 
46                        AliESDEvent* esd) const {FillZDCintoESD(clustersTree, esd);}
47   
48   void   FillZDCintoESD(TTree *clustersTree, AliESDEvent *esd) const;
49   
50   // parameter settings for reconstruction
51   void SetRecoMode(Int_t recoMode, Float_t beamEnergy) 
52        {fRecoMode=recoMode; fBeamEnergy=beamEnergy;}
53   static void SetRecoParam(AliZDCRecoParam * const param)
54               {fgRecoParam = param;}
55   
56   Int_t   GetRecoMode() const {return fRecoMode;}
57   Float_t GetBeamEnergy() const {return fBeamEnergy;}
58   
59   AliESDZDC* GetZDCESDData() const {return fESDZDC;}
60   
61   static const AliZDCRecoParam* GetRecoParam() 
62   {return dynamic_cast<const AliZDCRecoParam*>(AliReconstructor::GetRecoParam(9));}
63     
64   void  SetPedSubMode(Int_t pedsubMode) {fPedSubMode=pedsubMode;}
65   Int_t GetPedSubMode() const {return fPedSubMode;}
66   
67   void    SetSignalThreshold(Float_t val) {fSignalThreshold=val;}
68   Float_t GetSignalThreshold() const {return fSignalThreshold;}
69   
70   // OCDB objects for reconstruction
71   AliCDBStorage       *SetStorage(const char* uri);
72   AliZDCPedestals     *GetPedestalData() const; 
73   AliZDCEnCalib       *GetEnergyCalibData() const; 
74   AliZDCSaturationCalib *GetSaturationCalibData() const; 
75   AliZDCTowerCalib    *GetTowerCalibData() const; 
76   AliZDCMBCalib       *GetMBCalibData() const; 
77   AliZDCTDCCalib      *GetTDCCalibData() const; 
78   
79 private:
80   AliZDCReconstructor(const AliZDCReconstructor&); //Not implemented
81   AliZDCReconstructor& operator =(const AliZDCReconstructor&); //Not implemented
82
83   void   ReconstructEventpp(TTree *clustersTree, 
84          const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
85          const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
86          const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
87          Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
88          Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
89          const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const;
90   void   ReconstructEventPbPb(TTree *clustersTree, 
91          const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
92          const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
93          const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
94          Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
95          Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
96          const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const;
97
98   static AliZDCRecoParam *fgRecoParam; // reconstruction parameters
99
100   static AliZDCMBCalib   *fgMBCalibData;   //! mb calibration data
101   AliZDCPedestals  *fPedData;             //! pedestal calibration data
102   AliZDCEnCalib    *fEnCalibData;         //! energy calibration data
103   AliZDCSaturationCalib  *fSatCalibData;          //! energy calibration data
104   AliZDCTowerCalib *fTowCalibData;        //! equalization calibration data
105   AliZDCTDCCalib   *fTDCCalibData;        //! TDC offset data
106   
107   Int_t    fRecoMode;       // =1->p-p, =2->A-A
108   Float_t  fBeamEnergy;     // beam energy
109   Int_t    fNRun;           // Run Number (from raw data)
110   Bool_t   fIsCalibrationMB; // true if run type = "CALIBRATION_MB"
111   Int_t    fPedSubMode;     // =0->mean values, =1->from correlations
112   Float_t  fSignalThreshold; // Threshold value for "triggering" in p-p
113   Double_t fMeanPhase;      // LHC clock phase
114   
115   AliESDZDC* fESDZDC;       // ESD output object  
116
117   ClassDef(AliZDCReconstructor, 14)   // class for the ZDC reconstruction
118 };
119
120 #endif