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