a1537281988dd5e283c258366c2b38864c45693b
[u/mrichter/AliRoot.git] / TRD / AliTRDcalibDB.h
1 #ifndef ALITRDCALIBDB_H
2 #define ALITRDCALIBDB_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 ///////////////////////////////////////////////////////////////////////////////
7 //                                                                           //
8 // Class providing the calibration parameters by accessing the CDB           //
9 //                                                                           //
10 ///////////////////////////////////////////////////////////////////////////////
11
12 /* $Id$ */
13
14 #include "TObject.h"
15
16 class AliCDBEntry;
17
18 class AliTRDCalPID;
19 class AliTRDCalMonitoring;
20 class AliTRDCalROC;
21 class AliTRDCalDet;
22
23 class AliTRDcalibDB : public TObject {
24
25  public:
26
27   enum { kNplan =   6
28        , kNcham =   5
29        , kNsect =  18
30        , kNdet  = 540 };
31   
32   static AliTRDcalibDB      *Instance();
33   static void                Terminate();
34
35   void                       SetRun(Long64_t run);
36   Long64_t                   GetRun() { return fRun; }
37
38   Float_t                    GetVdrift(Int_t det, Int_t col, Int_t row);
39   Float_t                    GetVdriftAverage(Int_t det);
40         AliTRDCalROC        *GetVdriftROC(Int_t det);
41   const AliTRDCalDet        *GetVdriftDet();
42
43   Float_t                    GetT0(Int_t det, Int_t col, Int_t row);
44   Float_t                    GetT0Average(Int_t det);
45         AliTRDCalROC        *GetT0ROC(Int_t det);
46   const AliTRDCalDet        *GetT0Det();
47
48   Float_t                    GetGainFactor(Int_t det, Int_t col, Int_t row);
49   Float_t                    GetGainFactorAverage(Int_t det);
50         AliTRDCalROC        *GetGainFactorROC(Int_t det);
51   const AliTRDCalDet        *GetGainFactorDet();
52
53         AliTRDCalROC        *GetPRFROC(Int_t det);
54   Float_t                    GetPRFWidth(Int_t det, Int_t col, Int_t row);
55
56   Int_t                      GetNumberOfTimeBins();
57
58   Char_t                     GetPadStatus(Int_t det, Int_t col, Int_t row);
59   Char_t                     GetChamberStatus(Int_t det);
60
61   Bool_t                     IsPadMasked(Int_t det, Int_t col, Int_t row);
62   Bool_t                     IsPadBridgedLeft(Int_t det, Int_t col, Int_t row);
63   Bool_t                     IsPadBridgedRight(Int_t det, Int_t col, Int_t row);
64   
65   Bool_t                     IsChamberInstalled(Int_t det);
66   Bool_t                     IsChamberMasked(Int_t det);
67
68   const AliTRDCalMonitoring *GetMonitoringObject();
69   const AliTRDCalPID        *GetPIDLQObject();
70
71   // Related functions, these depend on calibration data
72   static Float_t             GetOmegaTau(Float_t vdrift, Float_t bz);
73          Int_t               PadResponse(Double_t signal, Double_t dist
74                                        , Int_t plane, Double_t *pad) const;
75   
76  protected:
77
78   // For caching see also implentation of GetCachedCDBObject in the .cxx file
79   enum { kCDBCacheSize = 15 };   // Number of cached objects
80   enum { kIDVdriftPad = 0
81        , kIDVdriftChamber
82        , kIDT0Pad
83        , kIDT0Chamber
84        , kIDGainFactorPad
85        , kIDGainFactorChamber
86        , kIDPRFWidth
87        , kIDFEE
88        , kIDChamberPos
89        , kIDStackPos
90        , kIDSuperModulePos
91        , kIDPIDLQ
92        , kIDMonitoringData
93        , kIDChamberStatus
94        , kIDPadStatus };         // IDs of cached objects
95
96   const TObject *GetCachedCDBObject(Int_t id);
97   
98   void           Invalidate();
99   void           SamplePRF();
100   
101   AliCDBEntry   *GetCDBEntry(const Char_t *cdbPath);
102   const TObject *CacheCDBEntry(Int_t id, const Char_t *cdbPath);
103
104   static AliTRDcalibDB *fgInstance;                 //  Instance of this class (singleton implementation)
105   static Bool_t         fgTerminated;               //  Defines if this class has already been terminated
106
107   AliCDBEntry          *fCDBEntries[kCDBCacheSize]; //  Cache for CDB entries
108   TObject              *fCDBCache[kCDBCacheSize];   //  Cache for calibration objects.
109
110   Long64_t              fRun;                       //  Run Number
111   
112   Float_t              *fPRFsmp;                    //! Sampled pad response
113   Int_t                 fPRFbin;                    //  Number of bins for the PRF
114   Float_t               fPRFlo;                     //  Lower boundary of the PRF
115   Float_t               fPRFhi;                     //  Higher boundary of the PRF
116   Float_t               fPRFwid;                    //  Bin width of the sampled PRF
117   Int_t                 fPRFpad;                    //  Distance to next pad in PRF
118   
119  private:
120
121   AliTRDcalibDB();                                  //  This is a singleton, constructor is private!  
122   AliTRDcalibDB(const AliTRDcalibDB &c);   
123   AliTRDcalibDB &operator=(const AliTRDcalibDB &c); 
124   virtual ~AliTRDcalibDB();
125
126   ClassDef(AliTRDcalibDB,3)                         //  Provides central access to the CDB
127
128 };
129
130 #endif