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