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