updates for 1/pT correction
[u/mrichter/AliRoot.git] / TPC / Calib / AliTPCPreprocessorOffline.h
1 #ifndef ALITPCPREPROCESSOROFFLINE_H
2 #define ALITPCPREPROCESSOROFFLINE_H
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 to create OCDB entries - processing the results of the OFFLINE calibration
10 //
11
12
13 #include "TNamed.h"
14 class TObjArray;
15 class AliTPCcalibTime;
16 class AliTPCcalibTimeGain;
17 class AliTPCcalibGainMult;
18 class AliTPCROC;
19 class AliTPCParam;
20 class TPad;
21 class AliCDBRunRange;
22 class AliCDBStorage;
23
24 class AliTPCPreprocessorOffline:public TNamed { 
25 public:
26   AliTPCPreprocessorOffline();
27   virtual ~AliTPCPreprocessorOffline();
28   void UpdateOCDBDrift(Int_t ustartRun, Int_t uendRun, AliCDBStorage* storage);
29   void UpdateOCDBGain(Int_t  startRunNumber, Int_t endRunNumber, AliCDBStorage* storage);
30   void UpdateDriftParam(AliTPCParam *param, TObjArray *const arr, Int_t lstartRun);
31
32   //
33   // v drift part
34   //
35   void GetRunRange(AliTPCcalibTime* const timeDrift);
36   void CalibTimeVdrift(const Char_t* file, Int_t ustartRun, Int_t uendRun,AliCDBStorage* ocdbStorage=0x0);
37   void AddHistoGraphs(  TObjArray * vdriftArray, AliTPCcalibTime * const timeDrift, Int_t minEntries);
38   void AddAlignmentGraphs(  TObjArray * vdriftArray, AliTPCcalibTime * const timeDrift);
39   void AddLaserGraphs(  TObjArray * vdriftArray, AliTPCcalibTime *timeDrift);
40   void SetDefaultGraphDrift(TGraph *graph, Int_t color, Int_t style);
41   void MakeDefaultPlots(TObjArray * const arr, TObjArray *picArray);
42   void SetMaxVDriftCorr(Double_t maxVDriftCorr=0.03) {fMaxVdriftCorr=maxVDriftCorr;};
43   Bool_t ValidateTimeDrift();
44   //
45   // Gain part
46   //
47   void CalibTimeGain(const Char_t* fileName, Int_t startRunNumber, Int_t endRunNumber,  AliCDBStorage* ocdbStorage);
48   void ReadGainGlobal(const Char_t* fileName="CalibObjectsTrain1.root");
49   void MakeQAPlot(Float_t  FPtoMIPratio);
50   Bool_t AnalyzeGain(Int_t startRunNumber, Int_t endRunNumber, Int_t minEntriesGaussFit = 500, Float_t FPtoMIPratio = 1.43); 
51   Bool_t AnalyzeAttachment(Int_t startRunNumber, Int_t endRunNumber, Int_t minEntriesFit = 2000);
52   Bool_t AnalyzePadRegionGain();
53   Bool_t AnalyzeGainDipAngle(Int_t padRegion = 0);
54   Bool_t AnalyzeGainInclinationAngle(Int_t padRegion = 0);
55   Bool_t AnalyzeGainMultiplicity();
56   Bool_t AnalyzeGainChamberByChamber();
57   void SetTimeGainRange(Double_t minGain=2.0, Double_t maxGain = 3.0) 
58        {fMinGain = minGain; fMaxGain = maxGain;};
59   Bool_t ValidateTimeGain();
60   //
61   // Alignment time part
62   //
63   void  MakeChainTime();
64   void  MakePrimitivesTime();
65   //  static void RegisterPrimitiveTimes();
66   void  CreateAlignTime(TString fstring, TVectorD paramC);  
67   void  MakeFitTime();
68   static Double_t EvalAt(Double_t phi, Double_t refX, Double_t theta, Int_t corr, Int_t ptype);
69   static Double_t EvalAtPar(Double_t phi, Double_t snp, Double_t refX, Double_t theta, Int_t corr, Int_t ptype, Int_t nstep);
70
71   // event/track counter related setters and getters
72   Int_t GetNeventsVdrift() const {return fNeventsVdrift;}
73   Int_t GetNtracksVdrift() const {return fNtracksVdrift;}
74   Int_t GetMinEventsVdrift() const {return fMinEventsVdrift;}
75   Int_t GetMinTracksVdrift() const {return fMinTracksVdrift;}
76   void SetMinEventsVdrift(Int_t min) {fMinEventsVdrift=min;}
77   void SetMinTracksVdrift(Int_t min) {fMinTracksVdrift=min;}
78
79   //
80   // QA drawing part
81   //
82   static void SetPadStyle(TPad *pad, Float_t mx0, Float_t mx1, Float_t my0, Float_t my1);
83   static void PrintArray(TObjArray *array);
84   TChain *GetAlignTree(){return fAlignTree;}
85   //
86   // graph filtering part
87   //
88   static TGraphErrors* FilterGraphMedianAbs(TGraphErrors * graph, Float_t cut,Double_t &medianY);
89   static TGraphErrors* FilterGraphDrift(TGraphErrors * graph, Float_t errSigmaCut, Float_t medianCutAbs);
90   static TGraphErrors * MakeGraphFilter0(THnSparse *hisN, Int_t itime, Int_t ival, Int_t minEntries, Double_t offset=0);
91
92   //
93   void SwitchOnValidation(Bool_t val = kTRUE) {fSwitchOnValidation = val;} 
94   Bool_t IsSwitchOnValidation() { return fSwitchOnValidation; } 
95
96   //
97   Int_t GetStatus();
98   enum ECalibStatusBit { kCalibFailedTimeDrift =0x0001,
99                          kCalibFailedTimeGain  =0x0002 };
100
101 private:
102   Int_t fMinEntries;                      // minimal number of entries for fit
103   Int_t fStartRun;                         // start Run - used to make fast selection in THnSparse
104   Int_t fEndRun;                           // end   Run - used to make fast selection in THnSparse
105   Int_t fStartTime;                        // fStartTime - used to make fast selection in THnSparse
106   Int_t fEndTime;                          // fEndTime   - used to make fast selection in THnSparse
107   AliCDBStorage*  fOCDBstorage;            // OCDB storage
108   TObjArray * fVdriftArray;               // array with output calibration graphs
109   AliTPCcalibTime * fTimeDrift;           // input data to construct calibration graphs
110   TGraphErrors * fGraphMIP;                // graph time dependence of MIP
111   TGraphErrors * fGraphCosmic;             // graph time dependence at Plateu
112   TGraphErrors * fGraphAttachmentMIP;      // graph time dependence of attachment (signal vs. mean driftlength)
113   AliSplineFit * fFitMIP;                  // fit of dependence - MIP
114   AliSplineFit * fFitCosmic;               // fit of dependence - Plateu
115   TObjArray    * fGainArray;               // array to be stored in the OCDB
116   AliTPCcalibTimeGain * fGainMIP;          // calibration component for MIP
117   AliTPCcalibTimeGain * fGainCosmic;       // calibration component for cosmic
118   AliTPCcalibGainMult * fGainMult;         // calibration component for pad region gain equalization and multiplicity dependence
119
120   TChain   *fAlignTree;        //alignment tree
121   //
122   Bool_t fSwitchOnValidation;  // flag to switch on validation of OCDB parameters
123   Float_t fMinGain;            // min gain
124   Float_t fMaxGain;            // max gain
125   Float_t fMaxVdriftCorr;      // max v-drift correction
126   Int_t fNtracksVdrift;           // n tracks used for v drift determination
127   Int_t fMinTracksVdrift;         // minimum numner of tracks for v drift determination
128   Int_t fNeventsVdrift;           // number of events used for drift calibration
129   Int_t fMinEventsVdrift;         // minimum number of events used for drift calibration
130
131   Int_t fCalibrationStatus;       // status of calibration, each set bit signifies a failure in a component (see ECalibStatusBit)
132
133 private:
134   AliTPCPreprocessorOffline& operator=(const AliTPCPreprocessorOffline&); // not implemented
135   AliTPCPreprocessorOffline(const AliTPCPreprocessorOffline&); // not implemented
136   ClassDef(AliTPCPreprocessorOffline,1)
137 };
138
139 #endif