]>
Commit | Line | Data |
---|---|---|
1ee39b3a | 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; | |
1ee39b3a | 17 | class AliTRDclusterResolution : public AliTRDrecoTask |
18 | { | |
19 | public: | |
20 | enum EAxisBinning { // bins in z and x direction | |
56f313bd | 21 | kND = 1 |
1ee39b3a | 22 | }; |
23 | enum EResultContainer { // results container type | |
ebc01dc0 | 24 | kYSys = 0 // cluster2center pad calibration |
25 | ,kYRes = 1 // resolution on charge dependence | |
1ee39b3a | 26 | ,kSigm = 2 // sigma cluster as func of x and z |
27 | ,kMean = 3 // shift cluster as func of x and z | |
56f313bd | 28 | ,kNtasks = 4 // total number of subtasks |
1ee39b3a | 29 | }; |
56f313bd | 30 | enum ECalibrationParam { // calibration parameters to be used from OCDB |
31 | kVdrift = 0 | |
32 | ,kT0 = 1 | |
33 | ,kGain = 2 | |
34 | }; | |
35 | enum ECheckBits { | |
5468a262 | 36 | kSaveAs = BIT(21) // save intermediary results |
37 | ,kCalibrated = BIT(22) // load calibration | |
38 | ,kGlobal = BIT(23) // load global position | |
1ee39b3a | 39 | }; |
f8f46e4d | 40 | AliTRDclusterResolution(); |
705f8b0a | 41 | AliTRDclusterResolution(const char *name); |
1ee39b3a | 42 | virtual ~AliTRDclusterResolution(); |
43 | ||
f8f46e4d | 44 | void UserCreateOutputObjects(); |
45 | void UserExec(Option_t *); | |
1ee39b3a | 46 | Int_t GetDetector() const { return fDet; } |
801d4d50 | 47 | void GetPad(Int_t &c, Int_t &r) const { c=fCol, r=fRow; return;} |
bce4b27e | 48 | inline void GetDiffCoeff(Float_t &dt, Float_t &dl) const; |
1ee39b3a | 49 | inline Float_t GetExB() const; |
50 | inline Float_t GetVdrift() const; | |
801d4d50 | 51 | inline Float_t GetT0() const; |
e3147647 | 52 | inline Float_t GetGain() const; |
563d1b38 | 53 | Float_t GetDyRange() const {return fDyRange;} |
1ee39b3a | 54 | Bool_t GetRefFigure(Int_t ifig); |
56f313bd | 55 | Bool_t HasProcess(EResultContainer bit) const {return TESTBIT(fSubTaskMap, bit);} |
e3147647 | 56 | Bool_t IsCalibrated() const { return TestBit(kCalibrated);} |
5468a262 | 57 | Bool_t HasGlobalPosition() const { return TestBit(kGlobal);} |
56f313bd | 58 | Bool_t IsUsingCalibParam(ECalibrationParam par) const {return TESTBIT(fUseCalib, par);} |
1ee39b3a | 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 | ||
5468a262 | 66 | Bool_t LoadCalibration(); |
67 | Bool_t LoadGlobalChamberPosition(); | |
1ee39b3a | 68 | Bool_t PostProcess(); |
801d4d50 | 69 | void SetCalibrationRegion(Int_t det, Int_t col=-1, Int_t row=-1); |
1ee39b3a | 70 | void SetVisual(); |
563d1b38 | 71 | void SetDyRange(Float_t dy) {if(dy>0) fDyRange = dy;} |
56f313bd | 72 | void SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fSubTaskMap, bit) : CLRBIT(fSubTaskMap, bit);} |
1ee39b3a | 73 | void SetSaveAs(Bool_t v = kTRUE) {SetBit(kSaveAs, v);} |
56f313bd | 74 | void SetUseCalibParam(ECalibrationParam par, Bool_t v = kTRUE) {v ? SETBIT(fUseCalib, par) : CLRBIT(fUseCalib, par);} |
5935a6da | 75 | inline void ResetProcesses(); |
1ee39b3a | 76 | |
77 | protected: | |
78 | void ProcessCharge(); | |
380fdeeb | 79 | Bool_t ProcessNormalTracks(); |
1ee39b3a | 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 | |
5935a6da | 89 | TObjArray *fResults;// list of result graphs/histos/trees |
56f313bd | 90 | UChar_t fSubTaskMap; // steer map for subtasks |
91 | UChar_t fUseCalib; // steer map for calibration params | |
1ee39b3a | 92 | Short_t fDet; // detector (-1 for all) |
801d4d50 | 93 | Char_t fCol; // pad column (-1 for all) |
94 | Char_t fRow; // pad row (-1 for all) | |
1ee39b3a | 95 | Float_t fExB; // tg of the Lorentz angle |
bce4b27e | 96 | Float_t fDt; // diffusion coeff. transversal |
97 | Float_t fDl; // diffusion coeff. longitudinal | |
1ee39b3a | 98 | Float_t fVdrift; // mean drift velocity |
5935a6da | 99 | Float_t fT0; // time 0 |
e3147647 | 100 | Float_t fGain; // gain |
5468a262 | 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 | |
1ee39b3a | 104 | static const Float_t fgkTimeBinLength;// time bin length (invers of sampling frequency) |
105 | ||
106 | // working named variables | |
563d1b38 | 107 | Float_t fDyRange; // min/max dy |
5935a6da | 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 | |
1ee39b3a | 115 | |
bce4b27e | 116 | ClassDef(AliTRDclusterResolution, 6) // cluster resolution |
1ee39b3a | 117 | }; |
118 | ||
bce4b27e | 119 | //___________________________________________________ |
120 | inline void AliTRDclusterResolution::GetDiffCoeff(Float_t &dt, Float_t &dl) const | |
121 | { | |
3ecd3327 | 122 | if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetDiffCoeff() : Instance not calibrated.\n"); |
bce4b27e | 123 | dt=fDt; dl=fDl; |
124 | return; | |
125 | } | |
126 | ||
127 | ||
1ee39b3a | 128 | //___________________________________________________ |
129 | inline Float_t AliTRDclusterResolution::GetExB() const | |
130 | { | |
3ecd3327 | 131 | if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetExB() : Instance not calibrated.\n"); |
1ee39b3a | 132 | return fExB; |
133 | } | |
134 | ||
135 | //___________________________________________________ | |
136 | inline Float_t AliTRDclusterResolution::GetVdrift() const | |
137 | { | |
3ecd3327 | 138 | if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetVdrift() : Instance not calibrated.\n"); |
1ee39b3a | 139 | return fVdrift; |
140 | } | |
141 | ||
801d4d50 | 142 | //___________________________________________________ |
143 | inline Float_t AliTRDclusterResolution::GetT0() const | |
e3147647 | 144 | { |
3ecd3327 | 145 | if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetT0() : Instance not calibrated.\n"); |
801d4d50 | 146 | return fT0; |
147 | } | |
148 | ||
e3147647 | 149 | //___________________________________________________ |
150 | inline Float_t AliTRDclusterResolution::GetGain() const | |
151 | { | |
3ecd3327 | 152 | if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetGain() : Instance not calibrated.\n"); |
e3147647 | 153 | return fGain; |
154 | } | |
155 | ||
1ee39b3a | 156 | //___________________________________________________ |
5935a6da | 157 | inline void AliTRDclusterResolution::ResetProcesses() |
1ee39b3a | 158 | { |
ebc01dc0 | 159 | CLRBIT(fSubTaskMap, kYRes); |
160 | CLRBIT(fSubTaskMap, kYSys); | |
56f313bd | 161 | CLRBIT(fSubTaskMap, kSigm); |
162 | CLRBIT(fSubTaskMap, kMean); | |
1ee39b3a | 163 | } |
164 | ||
165 | #endif | |
166 |