1 #ifndef ALITRDCLUSTERRESOLUTION_H
2 #define ALITRDCLUSTERRESOLUTION_H
4 ///////////////////////////////////////////////////////////////////////////////
6 // TRD cluster error parameterization
8 // Alexandru Bercuci <A.Bercuci@gsi.de> //
9 ////////////////////////////////////////////////////////////////////////////
11 #ifndef ALITRDRECOTASK_H
12 #include "AliTRDrecoTask.h"
20 class AliTRDclusterResolution : public AliTRDrecoTask
23 enum EAxisBinning { // bins in z and x direction
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
33 enum ECalibrationParam { // calibration parameters to be used from OCDB
39 kSaveAs = BIT(21) // save intermediary results
40 ,kCalibrated = BIT(22) // load calibration
41 ,kGlobal = BIT(23) // load global position
43 AliTRDclusterResolution();
44 AliTRDclusterResolution(const char *name);
45 virtual ~AliTRDclusterResolution();
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);}
64 TObjArray* Results() const {return fResults;};
66 Bool_t IsVisual() const {return Bool_t(fCanvas);}
67 Bool_t IsSaveAs() const {return TestBit(kSaveAs);}
69 Bool_t LoadCalibration();
70 Bool_t LoadGlobalChamberPosition();
72 void SetCalibrationRegion(Int_t det, Int_t col=-1, Int_t row=-1);
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();
82 Bool_t ProcessNormalTracks();
87 AliTRDclusterResolution(const AliTRDclusterResolution&);
88 AliTRDclusterResolution& operator=(const AliTRDclusterResolution&);
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)
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
119 ClassDef(AliTRDclusterResolution, 6) // cluster resolution
122 //___________________________________________________
123 inline void AliTRDclusterResolution::GetDiffCoeff(Float_t &dt, Float_t &dl) const
125 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
131 //___________________________________________________
132 inline Float_t AliTRDclusterResolution::GetExB() const
134 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
138 //___________________________________________________
139 inline Float_t AliTRDclusterResolution::GetVdrift() const
141 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
145 //___________________________________________________
146 inline Float_t AliTRDclusterResolution::GetT0() const
148 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
152 //___________________________________________________
153 inline Float_t AliTRDclusterResolution::GetGain() const
155 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
159 //___________________________________________________
160 inline void AliTRDclusterResolution::ResetProcesses()
162 CLRBIT(fSubTaskMap, kYRes);
163 CLRBIT(fSubTaskMap, kYSys);
164 CLRBIT(fSubTaskMap, kSigm);
165 CLRBIT(fSubTaskMap, kMean);