]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/TRD/AliTRDclusterResolution.h
add wrapper to TESTBIT macro to select TRD tasks
[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
5935a6da 24 kND = 25
1ee39b3a 25 };
26 enum EResultContainer { // results container type
27 kCenter = 0 // cluster2center pad calibration
28 ,kQRes = 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 os sub tasks
32 };
e3147647 33 enum ECheckBits {
34 kSaveAs = BIT(22) // save intermediary results
35 ,kCalibrated = BIT(23) // load calibration
1ee39b3a 36 };
f8f46e4d 37 AliTRDclusterResolution();
705f8b0a 38 AliTRDclusterResolution(const char *name);
1ee39b3a 39 virtual ~AliTRDclusterResolution();
40
f8f46e4d 41 void UserCreateOutputObjects();
42 void UserExec(Option_t *);
1ee39b3a 43 Int_t GetDetector() const { return fDet; }
801d4d50 44 void GetPad(Int_t &c, Int_t &r) const { c=fCol, r=fRow; return;}
1ee39b3a 45 inline Float_t GetExB() const;
46 inline Float_t GetVdrift() const;
801d4d50 47 inline Float_t GetT0() const;
e3147647 48 inline Float_t GetGain() const;
563d1b38 49 Float_t GetDyRange() const {return fDyRange;}
1ee39b3a 50 Bool_t GetRefFigure(Int_t ifig);
51 Bool_t HasProcess(EResultContainer bit) const {return TESTBIT(fStatus, bit);}
e3147647 52 Bool_t IsCalibrated() const { return TestBit(kCalibrated);}
1ee39b3a 53
54 TObjArray* Histos();
55 TObjArray* Results() const {return fResults;};
56
57 Bool_t IsVisual() const {return Bool_t(fCanvas);}
58 Bool_t IsSaveAs() const {return TestBit(kSaveAs);}
59
60 Bool_t PostProcess();
801d4d50 61 void SetCalibrationRegion(Int_t det, Int_t col=-1, Int_t row=-1);
1ee39b3a 62 void SetVisual();
563d1b38 63 void SetDyRange(Float_t dy) {if(dy>0) fDyRange = dy;}
1ee39b3a 64 void SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fStatus, bit) : CLRBIT(fStatus, bit);}
65 void SetSaveAs(Bool_t v = kTRUE) {SetBit(kSaveAs, v);}
5935a6da 66 inline void ResetProcesses();
1ee39b3a 67
68protected:
69 void ProcessCharge();
70 void ProcessCenterPad();
71 void ProcessSigma();
72 void ProcessMean();
73
74private:
75 AliTRDclusterResolution(const AliTRDclusterResolution&);
76 AliTRDclusterResolution& operator=(const AliTRDclusterResolution&);
e3147647 77 Bool_t LoadCalibration();
1ee39b3a 78
79 TCanvas *fCanvas; //! visualization canvas
80 TObjArray *fInfo; //! list of cluster info
5935a6da 81 TObjArray *fResults;// list of result graphs/histos/trees
1ee39b3a 82 UChar_t fStatus; // steer parameter of the task
83 Short_t fDet; // detector (-1 for all)
801d4d50 84 Char_t fCol; // pad column (-1 for all)
85 Char_t fRow; // pad row (-1 for all)
1ee39b3a 86 Float_t fExB; // tg of the Lorentz angle
87 Float_t fVdrift; // mean drift velocity
5935a6da 88 Float_t fT0; // time 0
e3147647 89 Float_t fGain; // gain
1ee39b3a 90 static const Float_t fgkTimeBinLength;// time bin length (invers of sampling frequency)
91
92 // working named variables
563d1b38 93 Float_t fDyRange; // min/max dy
5935a6da 94 UChar_t fLy; // TRD plane
95 Float_t fT; // calibrated time
96 Float_t fX; // local drift length
97 Float_t fY; // local rphi offset
98 Float_t fZ; // local anode wire offset
99 Float_t fR[4]; // mean/sgm resolution
100 Float_t fP[4]; // mean/sgm pulls
1ee39b3a 101
563d1b38 102 ClassDef(AliTRDclusterResolution, 4) // cluster resolution
1ee39b3a 103};
104
105//___________________________________________________
106inline Float_t AliTRDclusterResolution::GetExB() const
107{
e3147647 108 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
1ee39b3a 109 return fExB;
110}
111
112//___________________________________________________
113inline Float_t AliTRDclusterResolution::GetVdrift() const
114{
e3147647 115 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
1ee39b3a 116 return fVdrift;
117}
118
801d4d50 119//___________________________________________________
120inline Float_t AliTRDclusterResolution::GetT0() const
e3147647 121{
122 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
801d4d50 123 return fT0;
124}
125
e3147647 126//___________________________________________________
127inline Float_t AliTRDclusterResolution::GetGain() const
128{
129 if(!IsCalibrated()) AliWarning("Instance not calibrated.");
130 return fGain;
131}
132
1ee39b3a 133//___________________________________________________
5935a6da 134inline void AliTRDclusterResolution::ResetProcesses()
1ee39b3a 135{
136 CLRBIT(fStatus, kQRes);
137 CLRBIT(fStatus, kCenter);
138 CLRBIT(fStatus, kSigm);
139 CLRBIT(fStatus, kMean);
140}
141
142#endif
143