Install macros
[u/mrichter/AliRoot.git] / TPC / Base / AliTPCcalibDB.h
1 #ifndef ALITPCCALIBDB_H
2 #define ALITPCCALIBDB_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
13 class AliTPCTransform;
14 class AliTPCExB;
15 #include "TObject.h"
16 #include "TObjArray.h"
17 #include "TArrayI.h"
18 #include "TVectorD.h"
19 #include "TGraph.h"
20 #include "AliTPCCalPad.h"
21 #include "TString.h"
22 #include "AliSplineFit.h"
23 #include "TMap.h"
24
25 class TGraphErrors;
26 class AliTPCSensorTempArray;
27 class AliDCSSensorArray;
28 class AliCDBEntry;
29 class AliTPCParam;
30 class AliTPCAltroMapping;
31 class AliTPCClusterParam;
32 class AliTPCRecoParam;
33 class AliDCSSensor;
34 class AliDCSSensorArray;
35 class AliTPCCalibVdrift;
36 class AliGRPObject;
37 class AliTPCCalibRaw;
38 class AliTPCdataQA;
39 class AliMagF;
40 class AliTPCcalibDButil;
41 class AliCTPTimeParams;
42 class AliTPCCorrection;
43 //class AliCDBStorage;
44
45 class AliTPCcalibDB : public TObject
46 {
47  public: 
48   static AliTPCcalibDB* Instance();
49   AliTPCcalibDB();
50   virtual ~AliTPCcalibDB();
51   static void Terminate();
52   void   SetRun(Long64_t run);   
53   void   Update();  //update entries
54   void   UpdateRunInformations(Int_t run, Bool_t force=kFALSE);
55   void   UpdateNonRec();
56   Bool_t   GetTailcancelationGraphs(Int_t sector, TGraphErrors ** graphRes, Float_t * indexAmpGraphs);
57   //
58   Long64_t GetRun() const {return fRun;}
59   //
60   //
61   //
62   AliTPCTransform* GetTransform() const {return fTransform;}
63   AliTPCExB*    GetExB() const {return fExB;}
64   void          SetExBField(Float_t bz);
65   void          SetExBField( const AliMagF*   bmap);
66   static AliTPCExB*    GetExB(Float_t bz,Bool_t bdelete);
67   AliTPCCalPad* GetPadGainFactorOld() const {return fPadGainFactor;}
68   AliTPCCalPad* GetPadGainFactor() const {return fActiveChannelMap;}
69   AliTPCCalPad* GetActiveChannelMap() const { return fActiveChannelMap; }
70   AliTPCCalPad* GetDedxGainFactor() const {return fDedxGainFactor;}
71   AliTPCCalPad* GetPadTime0() const {return fPadTime0;}
72   AliTPCCalPad* GetDistortionMap(Int_t i) const;
73   AliTPCCorrection * GetTPCComposedCorrection() const { return fComposedCorrection;}
74   TObjArray * GetTPCComposedCorrectionArray() const { return fComposedCorrectionArray;}
75   void          SetTPCComposedCorrection(AliTPCCorrection *compCorr) { fComposedCorrection=compCorr;}
76   AliTPCCorrection * GetTPCComposedCorrection(Float_t field) const;
77   AliTPCCorrection * GetTPCComposedCorrectionDelta() const;
78   Bool_t      HasAlignmentOCDB() const { return fBHasAlignmentOCDB;}
79
80   AliTPCCalPad* GetPadNoise() const {return fPadNoise;}
81   AliTPCCalPad* GetPedestals() const{return fPedestals;}
82   //ALTRO config data
83   TObjArray* GetAltroConfigData()  const {return fALTROConfigData;}
84   AliTPCCalPad* GetALTROAcqStart() const {return fALTROConfigData?static_cast<AliTPCCalPad*>(fALTROConfigData->FindObject("AcqStart")):0;}
85   AliTPCCalPad* GetALTROZsThr()    const {return fALTROConfigData?static_cast<AliTPCCalPad*>(fALTROConfigData->FindObject("ZsThr")):0;}
86   AliTPCCalPad* GetALTROFPED()     const {return fALTROConfigData?static_cast<AliTPCCalPad*>(fALTROConfigData->FindObject("FPED")):0;}
87   AliTPCCalPad* GetALTROAcqStop()  const {return fALTROConfigData?static_cast<AliTPCCalPad*>(fALTROConfigData->FindObject("AcqStop")):0;}
88   AliTPCCalPad* GetALTROMasked()   const {return fALTROConfigData?static_cast<AliTPCCalPad*>(fALTROConfigData->FindObject("Masked")):0;}
89   TMap* GetDDLMap()   const {return fALTROConfigData?static_cast<TMap*>(fALTROConfigData->FindObject("DDLArray")):0;}
90   TMap* GetRCUconfig() const {return fALTROConfigData?(TMap*)(fALTROConfigData->FindObject("RCUconfig")):0;}
91   Int_t GetRCUTriggerConfig() const;
92   Bool_t IsTrgL0();
93   Bool_t IsTrgL1();
94     
95   TObjArray*    GetIonTailArray()  const {return fIonTailArray;}
96     
97   //Pulser data
98   TObjArray*    GetPulserData()  const {return fPulserData;}
99   AliTPCCalPad* GetPulserTmean() const {return fPulserData?static_cast<AliTPCCalPad*>(fPulserData->FindObject("PulserTmean")):0;}
100   AliTPCCalPad* GetPulserTrms()  const {return fPulserData?static_cast<AliTPCCalPad*>(fPulserData->FindObject("PulserTrms")):0;}
101   AliTPCCalPad* GetPulserQmean() const {return fPulserData?static_cast<AliTPCCalPad*>(fPulserData->FindObject("PulserQmean")):0;}
102   //CE data
103   TObjArray*    GetCEData()     const {return fCEData;}
104   AliTPCCalPad* GetCETmean()    const {return fCEData?static_cast<AliTPCCalPad*>(fCEData->FindObject("CETmean")):0;}
105   AliTPCCalPad* GetCETrms()     const {return fCEData?static_cast<AliTPCCalPad*>(fCEData->FindObject("CETrms")):0;}
106   AliTPCCalPad* GetCEQmean()    const {return fCEData?static_cast<AliTPCCalPad*>(fCEData->FindObject("CEQmean")):0;}
107   TObjArray*    GetCErocTtime() const {return fCEData?static_cast<TObjArray*>(fCEData->FindObject("rocTtime")):0;}
108   TObjArray*    GetCErocQtime() const {return fCEData?static_cast<TObjArray*>(fCEData->FindObject("rocQtime")):0;}
109   TObjArray*    GetCEfitsDrift()const {return fCEData?static_cast<TObjArray*>(fCEData->FindObject("ceFitsDrift")):0;}
110   TGraph*       GetCErocTgraph(const Int_t roc)const {return GetCErocTtime()?static_cast<TGraph*>(GetCErocTtime()->At(roc)):0;}
111   TGraph*       GetCErocQgraph(const Int_t roc)const {return GetCErocQtime()?static_cast<TGraph*>(GetCErocQtime()->At(roc)):0;}
112   static Float_t GetCEdriftTime(Int_t run, Int_t sector, Double_t timeStamp=-1., Int_t *entries=0);
113   static Float_t GetCEchargeTime(Int_t run, Int_t sector, Double_t timeStamp=-1., Int_t *entries=0);
114   //Raw calibration
115   AliTPCCalibRaw* GetCalibRaw() const {return fCalibRaw;}
116
117   //QA object
118   AliTPCdataQA*   GetDataQA() const {return fDataQA;}
119   //
120   AliTPCSensorTempArray* GetTemperature() const {return fTemperature;}
121   AliTPCParam*  GetParameters() const {return fParam;}
122   AliTPCAltroMapping ** GetMapping() const{ return fMapping;}
123   AliTPCClusterParam *GetClusterParam() const { return fClusterParam;}
124   TObjArray *GetTimeGainSplines() const { return fTimeGainSplines;}  
125   //
126   //Reco param getter
127   AliTPCRecoParam *GetRecoParam(Int_t i) const;
128   //GRP information
129   static AliGRPObject * GetGRP(Int_t run);
130   static TMap *  GetGRPMap(Int_t run);
131   static Float_t GetPressure(Int_t timeStamp, Int_t run, Int_t type=0);
132   static Float_t GetL3Current(Int_t run, Int_t statType=0);
133   static Float_t GetBz(Int_t run);
134   static Char_t  GetL3Polarity(Int_t run);
135   static TString GetRunType(Int_t run);
136   //
137   static Float_t GetDCSSensorValue(AliDCSSensorArray *arr, Int_t timeStamp, const char * sensorName, Int_t sigDigits=-1);
138   static Float_t GetDCSSensorMeanValue(AliDCSSensorArray *arr, const char * sensorName, Int_t sigDigits=-1);
139   //Voltage information
140   static Float_t GetChamberHighVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0, Bool_t current=kFALSE);
141   static Float_t GetSkirtVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0);
142   static Float_t GetCoverVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0);
143   static Float_t GetGGoffsetVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0);
144   static Float_t GetGGnegVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0);
145   static Float_t GetGGposVoltage(Int_t run, Int_t sector, Int_t timeStamp=-1, Int_t sigDigits=0);
146   //
147   Bool_t  GetChamberHVStatus(UInt_t roc)                  const { return (roc<72)?fChamberHVStatus[roc]:kFALSE;   }
148   Float_t GetChamberHighVoltageMedian(UInt_t roc)         const { return (roc<72)?fChamberHVmedian[roc]:0.;       }
149   Float_t GetChamberCurrentNominalHighVoltage(UInt_t roc) const { return (roc<72)?fCurrentNominalVoltage[roc]:0.; }
150   Float_t GetChamberGoodHighVoltageFraction(UInt_t roc)   const { return (roc<72)?fChamberHVgoodFraction[roc]:0.; }
151   AliDCSSensor* GetChamberHVSensor(UInt_t roc)            const { return (roc<72)?fHVsensors[roc]:0x0;            }
152   Double_t GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int_t sector, Int_t deltaCache, Int_t mode);
153   Bool_t  IsDataTakingActive(time_t timeStamp);
154   //
155   //Goofie Values
156   //
157   static Float_t GetValueGoofie(Int_t timeStamp, Int_t run, Int_t type);
158   //
159   static Bool_t  GetTemperatureFit(Int_t timeStamp, Int_t run, Int_t side,TVectorD& fit);
160   static Float_t GetTemperature(Int_t timeStamp, Int_t run, Int_t side);
161   static Double_t GetPTRelative(UInt_t timeSec, Int_t run,  Int_t side);
162   AliDCSSensor * GetPressureSensor(Int_t run, Int_t type=0);
163   //AliDCSSensor * GetVoltageSensor(Int_t run, Int_t type=0);
164   AliTPCSensorTempArray * GetTemperatureSensor(Int_t run);
165   AliDCSSensorArray *     GetGoofieSensors(Int_t run);
166   AliDCSSensorArray *     GetVoltageSensors(Int_t run);
167   AliTPCCalibVdrift *     GetVdrift(Int_t run);
168   TObjArray *             GetTimeGainSplinesRun(Int_t run);
169   TObjArray*              GetTimeVdriftSplineRun(Int_t run);
170   static Float_t GetGain(Int_t sector, Int_t row, Int_t pad);
171   //
172   // Drift velocity information
173   //
174   Double_t      GetVDriftCorrectionTime(Int_t timeStamp, Int_t run, Int_t side, Int_t mode);
175   Double_t      GetTime0CorrectionTime(Int_t timeStamp, Int_t run, Int_t side, Int_t mode);
176   Double_t      GetVDriftCorrectionGy(Int_t timeStamp, Int_t run, Int_t side, Int_t mode);
177   Double_t      GetVDriftCorrectionDeltaZ(Int_t timeStamp, Int_t run, Int_t side, Int_t mode);
178   //
179   AliSplineFit* GetVdriftSplineFit(const char* name, Int_t run);
180   AliSplineFit* CreateVdriftSplineFit(const char* graphName, Int_t run);
181   //
182   static void     CreateObjectList(const Char_t *filename, TObjArray *calibObjects);
183   static void MakeTree(const char * fileName, TObjArray * array, const char * mapFileName = 0, AliTPCCalPad* outlierPad = 0, Float_t ltmFraction = 0.9);
184   static void RegisterExB(Int_t index, Float_t bz, Bool_t bdelete);
185   //
186   //
187   //
188   AliTPCCalPad* MakeDeadMap(Double_t notInMap=1, const char *nameMappingFile="$ALICE_ROOT/TPC/Calib/tpcMapping.root" );
189   AliGRPObject * MakeGRPObjectFromMap(TMap *map);
190   AliCTPTimeParams* GetCTPTimeParams() const {return fCTPTimeParams;}
191   //Create a tree suited for diplaying with the AliTPCCalibViewerGUI
192   Bool_t CreateGUITree(const char* filename="");
193   static Bool_t CreateGUITree(Int_t run, const char* filename="");
194   static Bool_t CreateRefFile(Int_t run, const char* filename="");
195   //
196 protected:
197   
198   AliCDBEntry* GetCDBEntry(const char* cdbPath);   
199   void         UpdateChamberHighVoltageData();
200   Int_t        InitDeadMap();
201
202   Int_t        fRun;         // current run number
203   AliTPCTransform *fTransform;      // object responsible for spacial corrections
204   AliTPCExB *fExB;              // ExB correction factor
205 //  AliCDBStorage* fLocator;      // Storage locator retrieved from AliCDBManager
206   //
207   // calibration parameters per pad
208   //
209   AliTPCCalPad* fPadGainFactor;   // Gain calibration entry
210   AliTPCCalPad* fActiveChannelMap; // Map of active channels calculated on the fly
211   AliTPCCalPad* fDedxGainFactor;   // Gain calibration entry - for dEdx
212   AliTPCCalPad* fPadTime0;        // Time0 calibration entry
213   TObjArray   *fDistortionMap;    // distortion map
214   AliTPCCorrection *fComposedCorrection;  // general space point corrections
215   TObjArray *      fComposedCorrectionArray; //space point corrections for different field setting
216   AliTPCCalPad* fPadNoise;        // Noise calibration entry
217   AliTPCCalPad* fPedestals;       // Pedestal calibration entry
218   AliTPCCalibRaw *fCalibRaw;      // raw data calibration entry
219   AliTPCdataQA  *fDataQA;         // qa object
220   TObjArray *fALTROConfigData;    // ALTRO configuration data
221   TObjArray * fIonTailArray;      // array of graphs with the ion tail 
222   TObjArray *fPulserData;         // Calibration Pulser data
223   TObjArray *fCEData;             // CE data
224   //
225   // Chamber HV info
226   //
227   Bool_t  fChamberHVStatus[72];       // Status of the Chamber, HV wise (on/off)
228   Float_t fChamberHVmedian[72];       // median chamber high voltage
229   Float_t fCurrentNominalVoltage[72]; // current nominal voltages
230   Float_t fChamberHVgoodFraction[72]; // fraction of time the chamber has a good HV (wrt. robust median)
231   AliDCSSensor *fHVsensors[72];       // HV sensors
232   TGraph *fGrRunState;                // store information if run is active or paused
233   //
234   //
235   //
236   AliTPCSensorTempArray* fTemperature; // Temperature calibration entry
237   AliTPCAltroMapping **fMapping;   // Altro mapping   
238   //
239   //
240   AliTPCParam * fParam;                // TPC parameters
241   AliTPCClusterParam * fClusterParam;  // TPC cluster error, shape and Q parameterization
242   TObjArray * fRecoParamList;          // List of TPC reco param objects
243   TObjArray * fTimeGainSplines;        // Array of AliSplineFits: at 0 MIP position in time ; at 1 Fermi Plateau from cosmics
244   //
245   // Get the corssrun information
246   //
247   TMap      fTimeGainSplinesArray; //! array Array of AliSplineFits: at 0 MIP position in time ; at 1 Fermi Plateau from cosmics
248   TMap      fGRPArray;                                                  //! array of GRPs  -  per run
249   TMap      fGRPMaps;                                                   //! array of GRPs maps  -  per run - old data  
250   TMap      fGoofieArray;                                       //! array of GOOFIE values -per run
251   TMap      fVoltageArray;                                      //! array of Chamber HV values -per run
252   TMap      fTemperatureArray;                  //! array of temperature sensors - per run
253   TMap      fVdriftArray;                                       //! array of v drift interfaces
254   TMap      fDriftCorrectionArray;                //! array of drift correction
255
256   TArrayI        fRunList;                                                      //! run list - indicates try to get the run param
257   Bool_t         fBHasAlignmentOCDB;                // Flag - alignment from the Transformation class
258   //
259   static AliTPCcalibDB* fgInstance;  // singleton control
260   static Bool_t       fgTerminated;  // termination control 
261   static TObjArray    fgExBArray;    // array of ExB corrections
262   AliTPCcalibDButil   *fDButil;       // utility class
263   //ctp info
264   AliCTPTimeParams *fCTPTimeParams;   //CTP timing parameters
265   Int_t            fMode;             //RCU trigger config mode
266
267  private:
268    AliTPCcalibDB (const AliTPCcalibDB& );
269    AliTPCcalibDB& operator= (const AliTPCcalibDB& );
270   
271    ClassDef(AliTPCcalibDB, 1)
272 };
273
274 #endif