]>
Commit | Line | Data |
---|---|---|
8166d5d7 | 1 | #ifndef ALITPCCALIBDBUTIL_H |
2 | #define ALITPCCALIBDBUTIL_H | |
892226be | 3 | |
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | /////////////////////////////////////////////////////////////////////////////// | |
8 | // // | |
9 | // Class providing the calculation of derived quantities (mean,rms,fits,...) // | |
10 | // of calibration entries // | |
11 | // // | |
12 | /////////////////////////////////////////////////////////////////////////////// | |
13 | ||
14 | #include <TObject.h> | |
ea09e1dd | 15 | #include <TArrayI.h> |
1be09c9e | 16 | #include <TVectorDfwd.h> |
17 | #include <TVectorFfwd.h> | |
18 | #include <TMatrixDfwd.h> | |
892226be | 19 | |
949d8707 | 20 | class TGraph; |
21 | class TMap; | |
892226be | 22 | class AliDCSSensorArray; |
23 | class AliTPCcalibDB; | |
24 | class AliTPCCalPad; | |
37f2177e | 25 | class AliTPCCalROC; |
892226be | 26 | class AliTPCmapper; |
6e7d7dc4 | 27 | class AliTPCCalibRaw; |
949d8707 | 28 | class AliCDBEntry; |
37f2177e | 29 | class AliDCSSensor; |
30 | class AliDCSSensorArray; | |
31 | class AliTPCSensorTempArray; | |
949d8707 | 32 | class AliTPCdataQA; |
a23ba1c3 | 33 | class TGraphErrors; |
34 | class TTreeSRedirector; | |
37f2177e | 35 | class AliTPCCalROC; |
8166d5d7 | 36 | |
37 | ||
892226be | 38 | class AliTPCcalibDButil : public TObject |
39 | { | |
40 | public: | |
41 | AliTPCcalibDButil(); | |
42 | virtual ~AliTPCcalibDButil(); | |
43 | ||
44 | void UpdateFromCalibDB(); | |
45 | //data processing functions | |
7390f655 | 46 | void ProcessCEdata(const char* fitFormula, TVectorD &fitResultsA, TVectorD &fitResultsC, |
8166d5d7 | 47 | Int_t &noutliersCE, Double_t & chi2A, Double_t &chi2C, AliTPCCalPad * const outCE=0); |
892226be | 48 | void ProcessCEgraphs(TVectorD &vecTEntries, TVectorD &vecTMean, TVectorD &vecTRMS, TVectorD &vecTMedian, |
49 | TVectorD &vecQEntries, TVectorD &vecQMean, TVectorD &vecQRMS, TVectorD &vecQMedian, | |
50 | Float_t &driftTimeA, Float_t &driftTimeC ); | |
51 | void ProcessNoiseData(TVectorD &vNoiseMean, TVectorD &vNoiseMeanSenRegions, | |
52 | TVectorD &vNoiseRMS, TVectorD &vNoiseRMSSenRegions, | |
93425263 | 53 | Int_t &nonMaskedZero, Int_t &nNaN); |
abb20887 | 54 | void ProcessQAData(TVectorD &vQaOcc, TVectorD &vQaQtot, TVectorD &vQaQmax); |
892226be | 55 | void ProcessPulser(TVectorD &vMeanTime); |
56 | void ProcessALTROConfig(Int_t &nMasked); | |
57 | void ProcessGoofie(TVectorD & vecEntries, TVectorD & vecMedian, TVectorD &vecMean, TVectorD &vecRMS); | |
949d8707 | 58 | |
7390f655 | 59 | //processing functions using reference data |
60 | void ProcessPedestalVariations(TVectorF &pedestalDeviations); | |
61 | void ProcessNoiseVariations(TVectorF &noiseDeviations); | |
62 | void ProcessPulserVariations(TVectorF &pulserQdeviations, Float_t &varQMean, Int_t &npadsOutOneTB, Int_t &npadsOffAdd); | |
949d8707 | 63 | |
892226be | 64 | //getter preprocess information |
65 | Int_t GetNPulserOutliers() const {return fNpulserOutliers;} | |
8166d5d7 | 66 | Float_t GetMeanAltro(const AliTPCCalROC *roc, const Int_t row, const Int_t pad, AliTPCCalROC * const rocOut=0x0); |
892226be | 67 | AliTPCCalPad *GetPulserOutlierMap() const {return fPulserOutlier;} |
949d8707 | 68 | |
69 | //getters ref data | |
70 | TMap *GetReferenceMap() const {return fRefMap;} | |
c95e0219 | 71 | Int_t GetReferenceRun(const char* type) const; |
949d8707 | 72 | const char* GetRefValidity() const {return fRefValidity.Data();} |
73 | ||
74 | AliTPCCalPad* GetRefPadNoise() const {return fRefPadNoise;} | |
75 | AliTPCCalPad* GetRefPedestals() const {return fRefPedestals;} | |
76 | AliTPCCalPad* GetRefPedestalMasked() const {return fRefPedestalMasked;} | |
77 | AliTPCCalPad* GetRefPulserTmean() const {return fRefPulserTmean;} | |
78 | AliTPCCalPad* GetRefPulserTrms() const {return fRefPulserTrms;} | |
79 | AliTPCCalPad* GetRefPulserQmean() const {return fRefPulserQmean;} | |
80 | AliTPCCalPad* GetRefPulserOutlier() const {return fRefPulserOutlier;} | |
81 | AliTPCCalPad* GetRefPulserMasked() const {return fRefPulserMasked;} | |
82 | AliTPCCalPad* GetRefCETmean() const {return fRefCETmean;} | |
83 | AliTPCCalPad* GetRefCETrms() const {return fRefCETrms;} | |
84 | AliTPCCalPad* GetRefCEQmean() const {return fRefCEQmean;} | |
85 | AliTPCCalPad* GetRefCEMasked() const {return fRefCEMasked;} | |
86 | AliTPCCalPad* GetRefALTROFPED() const {return fRefALTROFPED;} | |
87 | AliTPCCalPad* GetRefALTROZsThr() const {return fRefALTROZsThr;} | |
88 | AliTPCCalPad* GetRefALTROAcqStart() const {return fRefALTROAcqStart;} | |
89 | AliTPCCalPad* GetRefALTROAcqStop() const {return fRefALTROAcqStop;} | |
90 | AliTPCCalPad* GetRefALTROMasked() const {return fRefALTROMasked;} | |
91 | ||
92 | ||
892226be | 93 | //setters for pad by pad information |
8166d5d7 | 94 | void SetPulserData(AliTPCCalPad * const tmean, AliTPCCalPad * const trms=0x0, AliTPCCalPad * const qmean=0x0) |
892226be | 95 | {fPulserTmean=tmean; fPulserTrms=trms; fPulserQmean=qmean;} |
98a4cc77 | 96 | void SetCEData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0) |
892226be | 97 | {fCETmean=tmean; fCETrms=trms; fCEQmean=qmean;} |
98a4cc77 | 98 | void SetNoisePedestal(AliTPCCalPad *const noise, AliTPCCalPad *const pedestal=0x0) |
892226be | 99 | {fPadNoise=noise; fPedestals=pedestal;} |
98a4cc77 | 100 | void SetALTROData(AliTPCCalPad *const masked) |
892226be | 101 | {fALTROMasked=masked;} |
98a4cc77 | 102 | void SetGoofieArray(AliDCSSensorArray *const arr) {fGoofieArray=arr;} |
949d8707 | 103 | |
7390f655 | 104 | //setters for pad by pad information |
105 | void SetRefFile(const char* filename); | |
949d8707 | 106 | void SetReferenceRun(Int_t run=-1); |
107 | void UpdateRefDataFromOCDB(); | |
98a4cc77 | 108 | void SetRefPulserData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0) |
7390f655 | 109 | {fRefPulserTmean=tmean; fRefPulserTrms=trms; fRefPulserQmean=qmean;} |
98a4cc77 | 110 | void SetRefCEData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0) |
7390f655 | 111 | {fRefCETmean=tmean; fRefCETrms=trms; fRefCEQmean=qmean;} |
98a4cc77 | 112 | void SetRefNoisePedestal(AliTPCCalPad *const noise, AliTPCCalPad *const pedestal=0x0) |
7390f655 | 113 | {fRefPadNoise=noise; fRefPedestals=pedestal;} |
98a4cc77 | 114 | void SetRefALTROData(AliTPCCalPad *const masked) |
7390f655 | 115 | {fRefALTROMasked=masked;} |
116 | ||
892226be | 117 | //creation of derived pad by pad calibration data |
2cb269df | 118 | AliTPCCalPad *CreatePadTime0(Int_t model, Double_t &gyA, Double_t &gyC, Double_t &chi2A, Double_t &chi2C); |
892226be | 119 | // |
2cb269df | 120 | // create outlyer maps |
121 | // | |
8166d5d7 | 122 | AliTPCCalPad *CreateCEOutlyerMap(Int_t &noutliersCE, AliTPCCalPad * const ceOut=0, Float_t minSignal=10, Float_t cutTrmsMin=0.9, Float_t cutTrmsMax=1.2, Float_t cutMaxDistT=0.7); |
123 | AliTPCCalPad *CreatePulserOutlyerMap(Int_t &noutliersPulser, AliTPCCalPad * const pulserOut=0, Float_t cutTime=3, Float_t cutnRMSQ=5, Float_t cutnRMSrms=5); | |
2cb269df | 124 | // |
125 | AliTPCCalPad *CreatePadTime0CE(TVectorD &fitResultsA, TVectorD&fitResultsC, Int_t &nOut, Double_t &chi2A, Double_t &chi2C, const char *dumpfile=0); | |
126 | // | |
127 | ||
892226be | 128 | void UpdatePulserOutlierMap(); |
7390f655 | 129 | void UpdateRefPulserOutlierMap(); |
130 | void PulserOutlierMap(AliTPCCalPad *pulOut, const AliTPCCalPad *pulT, const AliTPCCalPad *pulQ); | |
817766d5 | 131 | |
949d8707 | 132 | const char* GetGUIRefTreeDefaultName(); |
133 | ||
134 | Bool_t CreateGUIRefTree(const char* filename=""); | |
817766d5 | 135 | // |
136 | // graph tools | |
137 | // | |
a23ba1c3 | 138 | static Double_t GetLaserTime0(Int_t run, Int_t timeStamp, Int_t deltaT, Int_t side); |
8166d5d7 | 139 | static TGraph* FilterGraphMedian(TGraph * const graph, Float_t sigmaCut, Double_t &medianY); |
a23ba1c3 | 140 | static TGraph* FilterGraphMedianAbs(TGraph * graph, Float_t cut, Double_t &medianY); |
141 | static TGraphErrors* FilterGraphMedianErr(TGraphErrors * graph, Float_t sigmaCut,Double_t &medianY); | |
142 | // | |
143 | static void Sort(TGraph *graph); | |
144 | static void SmoothGraph(TGraph *graph, Double_t delta); | |
817766d5 | 145 | static Int_t GetNearest(TGraph *graph, Double_t xref, Double_t &dx, Double_t &y); |
8166d5d7 | 146 | static Double_t EvalGraphConst(TGraph * const graph, Double_t xref); |
1e722a63 | 147 | // |
148 | // Filter sensors | |
149 | // | |
150 | static Float_t FilterSensor(AliDCSSensor * sensor, Double_t ymin, Double_t ymax, Double_t maxdy, Double_t sigmaCut); | |
a980538f | 151 | // |
152 | // Filter AliRelAlignmentKalman - Alignment/Drift velocity | |
153 | // | |
8166d5d7 | 154 | static TMatrixD* MakeStatRelKalman(TObjArray * const array, Float_t minFraction, Int_t minStat, Float_t maxvd); |
155 | static TObjArray *SmoothRelKalman(TObjArray * const array,const TMatrixD & stat, Bool_t direction, Float_t sigmaCut); | |
156 | static TObjArray *SmoothRelKalman(TObjArray * const arrayP, TObjArray * const arrayM); | |
157 | static void FilterCE(Double_t deltaT=100, Double_t cutAbs=10, Double_t cutSigma=4., TTreeSRedirector * const pcstream=0); | |
158 | static void FilterTracks(Int_t run, Double_t cutSigma=20., TTreeSRedirector * const pcstream=0); | |
1e722a63 | 159 | static Float_t FilterTemperature(AliTPCSensorTempArray *tempArray, Double_t ymin=15, Double_t ymax=22, Double_t sigmaCut=5); |
a23ba1c3 | 160 | |
8166d5d7 | 161 | static void FilterGoofie(AliDCSSensorArray * goofieArray, Double_t deltaT=2, Double_t cutSigma=4., Double_t minVdn=8.5, Double_t maxVdn=9.05, TTreeSRedirector * const pcstream=0); |
a23ba1c3 | 162 | static Double_t GetTriggerOffsetTPC(Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0); |
163 | static Double_t GetVDriftTPC(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0); | |
164 | static Double_t GetVDriftTPCLaserTracks(Double_t &dist,Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2); | |
78f17711 | 165 | static Double_t GetVDriftTPCLaserTracksOnline(Double_t &dist, Int_t /*run*/, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2); |
a23ba1c3 | 166 | static Double_t GetVDriftTPCCE(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2); |
cc65e4f5 | 167 | static Double_t GetVDriftTPCITS(Double_t &dist, Int_t run, Int_t timeStamp); |
168 | static Double_t GetTime0TPCITS(Double_t &dist, Int_t run, Int_t timeStamp); | |
a23ba1c3 | 169 | Int_t MakeRunList(Int_t startRun, Int_t stopRun); // find the list of usable runs |
170 | Int_t FindRunTPC(Int_t itime, Bool_t debug=kFALSE); | |
b5db1171 | 171 | |
172 | AliTPCCalPad* GetRefCalPad(AliCDBEntry *entry, const char* objName); | |
173 | AliTPCCalPad* GetRefCalPad(AliCDBEntry *entry); | |
174 | AliTPCCalPad* GetAltroMasked(const char* cdbPath, const char* name); | |
175 | Bool_t HasRefChanged(const char *cdbPath); | |
176 | Int_t GetCurrentReferenceRun(const char* type) const; | |
177 | AliCDBEntry* GetRefEntry(const char* cdbPath); | |
178 | ||
892226be | 179 | private: |
180 | AliTPCcalibDB *fCalibDB; //pointer to calibDB object | |
181 | AliTPCCalPad *fPadNoise; //noise information | |
182 | AliTPCCalPad *fPedestals; //pedestal information | |
183 | AliTPCCalPad *fPulserTmean; //pulser mean time information | |
184 | AliTPCCalPad *fPulserTrms; //pulser rms time information | |
185 | AliTPCCalPad *fPulserQmean; //pulser mean q information | |
186 | AliTPCCalPad *fPulserOutlier; //pulser outlier map | |
187 | AliTPCCalPad *fCETmean; //central electrode mean time information | |
188 | AliTPCCalPad *fCETrms; //central electrode rms time information | |
189 | AliTPCCalPad *fCEQmean; //central electrode mean q information | |
190 | AliTPCCalPad *fALTROMasked; //ALTRO masked channels information | |
191 | // | |
6e7d7dc4 | 192 | AliTPCCalibRaw *fCalibRaw; //raw calibration object |
949d8707 | 193 | // |
194 | AliTPCdataQA *fDataQA; //data qa | |
7390f655 | 195 | //reference data |
949d8707 | 196 | TMap *fRefMap; // latest map to reference information |
197 | TMap *fCurrentRefMap; // reference data map of entries currently loaded | |
198 | TString fRefValidity; // validity range of reference data | |
199 | // | |
7390f655 | 200 | AliTPCCalPad *fRefPadNoise; //Reference noise information |
201 | AliTPCCalPad *fRefPedestals; //Reference pedestal information | |
949d8707 | 202 | AliTPCCalPad *fRefPedestalMasked; //Reference masked channels in pedestal run |
7390f655 | 203 | AliTPCCalPad *fRefPulserTmean; //Reference pulser mean time information |
204 | AliTPCCalPad *fRefPulserTrms; //Reference pulser rms time information | |
205 | AliTPCCalPad *fRefPulserQmean; //Reference pulser mean q information | |
206 | AliTPCCalPad *fRefPulserOutlier; //Reference pulser outlier map | |
949d8707 | 207 | AliTPCCalPad *fRefPulserMasked; //Reference masked channels in pulser run |
7390f655 | 208 | AliTPCCalPad *fRefCETmean; //Reference central electrode mean time information |
209 | AliTPCCalPad *fRefCETrms; //Reference central electrode rms time information | |
210 | AliTPCCalPad *fRefCEQmean; //Reference central electrode mean q information | |
949d8707 | 211 | AliTPCCalPad *fRefCEMasked; //Reference masked channels in laser run |
212 | AliTPCCalPad *fRefALTROFPED; //Reference fixed pedestal value | |
213 | AliTPCCalPad *fRefALTROZsThr; //Reference zero suppression threshol | |
214 | AliTPCCalPad *fRefALTROAcqStart; //Reference accquistion start time bin | |
215 | AliTPCCalPad *fRefALTROAcqStop; //Reference accquistion stop time bin | |
7390f655 | 216 | AliTPCCalPad *fRefALTROMasked; //Reference ALTRO masked channels information |
217 | // | |
218 | AliTPCCalibRaw *fRefCalibRaw; //Reference raw calibration object | |
949d8707 | 219 | // |
220 | AliTPCdataQA *fRefDataQA; //Reference data QA | |
6e7d7dc4 | 221 | // |
892226be | 222 | AliDCSSensorArray* fGoofieArray; //Goofie Data |
223 | // | |
224 | AliTPCmapper *fMapper; //TPC mapping handler | |
225 | Int_t fNpulserOutliers; //number of outliers from Pulser calibration | |
226 | ||
227 | Float_t fIrocTimeOffset; //timing offset between IROC and OROC in timebins | |
228 | Float_t fCETmaxLimitAbs; //maximum variation in CE data before pads will be treated as outliers | |
229 | Float_t fPulTmaxLimitAbs; //maximum variation of Pulser Signals (time) before pads will be treated as outliers | |
230 | Float_t fPulQmaxLimitAbs; //maximum variation of Pulser Signals (charge) before pads will be treated as outliers | |
231 | Float_t fPulQminLimit; //minimum charge value for Pulser Signals before pads will be treated as outliers | |
a23ba1c3 | 232 | |
233 | // | |
234 | // helpers to get the run number for given time stamps | |
235 | // | |
236 | // filters | |
892226be | 237 | |
a23ba1c3 | 238 | TArrayI fRuns; // run list with OCDB info |
239 | TArrayI fRunsStart; // start time for given run | |
240 | TArrayI fRunsStop; // stop time for given run | |
8166d5d7 | 241 | |
892226be | 242 | AliTPCcalibDButil (const AliTPCcalibDButil& ); |
243 | AliTPCcalibDButil& operator= (const AliTPCcalibDButil& ); | |
244 | ||
949d8707 | 245 | |
78f17711 | 246 | static Double_t GetVDriftTPCLaserTracksCommon(Double_t &dist, Int_t timeStamp, Double_t deltaT, Int_t side, TObjArray * const array); |
247 | ||
248 | ||
892226be | 249 | ClassDef(AliTPCcalibDButil,0) |
250 | }; | |
251 | ||
252 | ||
253 | #endif |