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