]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/TRD/AliTRDclusterResolution.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDclusterResolution.h
1 #ifndef ALITRDCLUSTERRESOLUTION_H
2 #define ALITRDCLUSTERRESOLUTION_H
3
4 ///////////////////////////////////////////////////////////////////////////////
5 //                                                                           //
6 //  TRD cluster error parameterization                  
7 //  Authors:                                                              //
8 //    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
9 ////////////////////////////////////////////////////////////////////////////
10
11 #ifndef ALITRDRECOTASK_H
12 #include "AliTRDrecoTask.h"
13 #endif
14
15 class TCanvas;
16 class TObjArray;
17 class AliTRDclusterResolution : public AliTRDrecoTask
18 {
19 public:
20   enum EAxisBinning { // bins in z and x direction
21     kND  = 1
22   };
23   enum EResultContainer { // results container type
24     kYSys = 0   // cluster2center pad calibration
25    ,kYRes   = 1   // resolution on charge dependence
26    ,kSigm   = 2   // sigma cluster as func of x and z
27    ,kMean   = 3   // shift cluster as func of x and z
28    ,kNtasks = 4   // total number of subtasks
29   };
30   enum ECalibrationParam { // calibration parameters to be used from OCDB
31     kVdrift = 0
32    ,kT0     = 1
33    ,kGain   = 2
34   };
35   enum ECheckBits {
36     kSaveAs     = BIT(21) // save intermediary results
37    ,kCalibrated = BIT(22) // load calibration
38    ,kGlobal     = BIT(23) // load global position
39   };
40   AliTRDclusterResolution();
41   AliTRDclusterResolution(const char *name);
42   virtual ~AliTRDclusterResolution();
43
44   void          UserCreateOutputObjects();
45   void          UserExec(Option_t *);
46   Int_t         GetDetector() const { return fDet; }
47   void          GetPad(Int_t &c, Int_t &r) const { c=fCol, r=fRow; return;}
48   inline void   GetDiffCoeff(Float_t &dt, Float_t &dl) const;
49   inline Float_t GetExB() const;
50   inline Float_t GetVdrift() const;
51   inline Float_t GetT0() const;
52   inline Float_t GetGain() const;
53   Float_t       GetDyRange() const {return fDyRange;}
54   Bool_t        GetRefFigure(Int_t ifig);
55   Bool_t        HasProcess(EResultContainer bit) const {return TESTBIT(fSubTaskMap, bit);}
56   Bool_t        IsCalibrated() const { return TestBit(kCalibrated);}
57   Bool_t        HasGlobalPosition() const { return TestBit(kGlobal);}
58   Bool_t        IsUsingCalibParam(ECalibrationParam par) const {return TESTBIT(fUseCalib, par);}
59
60   TObjArray*    Histos(); 
61   TObjArray*    Results() const {return fResults;}; 
62
63   Bool_t        IsVisual() const {return Bool_t(fCanvas);}
64   Bool_t        IsSaveAs() const {return TestBit(kSaveAs);}
65
66   Bool_t        LoadCalibration();
67   Bool_t        LoadGlobalChamberPosition();
68   Bool_t        PostProcess();
69   void          SetCalibrationRegion(Int_t det, Int_t col=-1, Int_t row=-1);
70   void          SetVisual();
71   void          SetDyRange(Float_t dy) {if(dy>0) fDyRange = dy;}
72   void          SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fSubTaskMap, bit) : CLRBIT(fSubTaskMap, bit);}
73   void          SetSaveAs(Bool_t v = kTRUE) {SetBit(kSaveAs, v);}
74   void          SetUseCalibParam(ECalibrationParam par, Bool_t v = kTRUE) {v ? SETBIT(fUseCalib, par) : CLRBIT(fUseCalib, par);}
75   inline void   ResetProcesses();
76
77 protected:
78   void    ProcessCharge();
79   Bool_t  ProcessNormalTracks();
80   void    ProcessSigma();
81   void    ProcessMean();
82
83 private:
84   AliTRDclusterResolution(const AliTRDclusterResolution&);  
85   AliTRDclusterResolution& operator=(const AliTRDclusterResolution&);
86
87   TCanvas    *fCanvas; //! visualization canvas 
88   TObjArray  *fInfo;   //! list of cluster info
89   TObjArray  *fResults;// list of result graphs/histos/trees
90   UChar_t    fSubTaskMap;  // steer map for subtasks
91   UChar_t    fUseCalib;    // steer map for calibration params
92   Short_t    fDet;     // detector (-1 for all)
93   Char_t     fCol;     // pad column (-1 for all)
94   Char_t     fRow;     // pad row (-1 for all)
95   Float_t    fExB;     // tg of the Lorentz angle
96   Float_t    fDt;      // diffusion coeff. transversal
97   Float_t    fDl;      // diffusion coeff. longitudinal
98   Float_t    fVdrift;  // mean drift velocity
99   Float_t    fT0;      // time 0
100   Float_t    fGain;    // gain
101   Float_t    fXch;     // anode wire position for chamber
102   Float_t    fZch;     // Z position for calibration element
103   Float_t    fH;       // tg of tilting angle
104   static const Float_t fgkTimeBinLength;// time bin length (invers of sampling frequency)
105
106   // working named variables
107   Float_t    fDyRange; // min/max dy
108   UChar_t    fLy;      // TRD plane 
109   Float_t    fT;       // calibrated time 
110   Float_t    fX;       // local drift length 
111   Float_t    fY;       // local rphi offset 
112   Float_t    fZ;       // local anode wire offset 
113   Float_t    fR[4];    // mean/sgm resolution
114   Float_t    fP[4];    // mean/sgm pulls
115   
116   ClassDef(AliTRDclusterResolution, 6)  // cluster resolution
117 };
118
119 //___________________________________________________
120 inline void AliTRDclusterResolution::GetDiffCoeff(Float_t &dt, Float_t &dl) const
121 {
122   if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetDiffCoeff() : Instance not calibrated.\n");
123   dt=fDt; dl=fDl;
124   return;
125 }
126
127
128 //___________________________________________________
129 inline Float_t AliTRDclusterResolution::GetExB() const
130
131   if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetExB() : Instance not calibrated.\n");
132   return fExB;
133 }
134
135 //___________________________________________________
136 inline Float_t AliTRDclusterResolution::GetVdrift() const
137
138   if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetVdrift() : Instance not calibrated.\n");
139   return fVdrift;
140 }
141
142 //___________________________________________________
143 inline Float_t AliTRDclusterResolution::GetT0() const
144 {
145   if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetT0() : Instance not calibrated.\n");
146   return fT0;
147 }
148
149 //___________________________________________________
150 inline Float_t AliTRDclusterResolution::GetGain() const
151 {
152   if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetGain() : Instance not calibrated.\n");
153   return fGain;
154 }
155
156 //___________________________________________________
157 inline void AliTRDclusterResolution::ResetProcesses()
158 {
159   CLRBIT(fSubTaskMap, kYRes);
160   CLRBIT(fSubTaskMap, kYSys);
161   CLRBIT(fSubTaskMap, kSigm);
162   CLRBIT(fSubTaskMap, kMean);
163 }
164
165 #endif
166