]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/TPCbase/AliTPCClusterParam.h
doxy: TPC/TPCbase converted
[u/mrichter/AliRoot.git] / TPC / TPCbase / AliTPCClusterParam.h
1 #ifndef ALITPCCLUSTERPARAM_H
2 #define ALITPCCLUSTERPARAM_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliTPCClusterParam.h,v */
7
8 /// \class AliTPCClusterParam
9 /// \brief TPC cluster error and shape parameterization
10
11
12 #include <TObject.h>
13 #include <TVectorDfwd.h>
14 #include <TMatrixDfwd.h>
15
16 class TTree;
17 class TObjArray;
18 class TH1;
19 class THnBase;
20 //_____________________________________________________________________________
21 class AliTPCClusterParam : public TObject {
22  public:
23   static AliTPCClusterParam* Instance();
24   AliTPCClusterParam();
25   AliTPCClusterParam(const AliTPCClusterParam& param);
26   AliTPCClusterParam & operator=(const AliTPCClusterParam& param);
27   virtual           ~AliTPCClusterParam();
28   virtual void  Print(Option_t* option = "") const;
29   void SetInstance(AliTPCClusterParam *const param){fgInstance = param;}
30   //
31   // Seting functions
32   //
33   void FitData(TTree * tree);
34   void FitResol(TTree * tree);
35   void FitRMS(TTree * tree);
36   void SetQnorm(Int_t ipad, Int_t itype,  const TVectorD *const norm);
37   void SetQnormCorr(Int_t ipad, Int_t itype, Int_t corrType, Float_t val, Int_t mode=1);
38   Double_t  GetQnormCorr(Int_t ipad, Int_t itype, Int_t corrType) const;
39   TMatrixD *GetQnormCorrMatrix(){return fQNormCorr;};
40   void ResetQnormCorr();
41   void SetWaveCorrectionMap( THnBase *WaveCorrectionMap);
42   void SetResolutionYMap( THnBase *ResolutionYMap);
43   //
44   // Charge parameterization
45   //
46   Float_t Qnorm(Int_t ipad, Int_t itype, Float_t dr, Float_t ty, Float_t tz);
47   Float_t QnormHis(Int_t ipad, Int_t itype, Float_t dr, Float_t ty, Float_t tz);
48
49
50   Float_t QnormPos(Int_t ipad, Bool_t isMax,  Float_t pad, Float_t time, Float_t z, Float_t sy2, Float_t sz2, Float_t qm, Float_t qt);
51   static Float_t SQnormPos(Int_t ipad, Bool_t isMax,  Float_t pad, Float_t time, Float_t z, Float_t sy2, Float_t sz2, Float_t qm, Float_t qt){ return fgInstance->QnormPos(ipad,isMax,pad,time,z,sy2,sz2,qm,qt);;}
52
53   Float_t PosCorrection(Int_t type, Int_t ipad,  Float_t pad, Float_t time, Float_t z, Float_t sy2, Float_t sz2, Float_t qm);
54   static Float_t  SPosCorrection(Int_t type, Int_t ipad,  Float_t pad, Float_t time, Float_t z, Float_t sy2, Float_t sz2, Float_t qm){ return fgInstance->PosCorrection(type,ipad,pad,time,z,sy2,sz2,qm);}
55   //
56   // Error parameterization
57   //
58   Float_t GetError0(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
59   Float_t GetError0Par(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
60   Float_t GetError1(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
61   Float_t GetErrorQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
62   Float_t GetErrorQPar(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
63   Float_t GetErrorQParScaled(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
64   //
65   // Shape parameterization
66   //
67   Float_t GetRMS0(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
68   Float_t GetRMS1(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
69   Float_t GetRMSQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
70   Float_t GetRMSSigma(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
71   Float_t GetShapeFactor(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean, Float_t rmsL, Float_t rmsM) const;
72   //
73   // Correction and resolution maps
74   //
75   const THnBase *GetWaveCorrectionMap() const { return fWaveCorrectionMap; }
76   const THnBase *GetResolutionYMap() const { return  fResolutionYMap; }
77   Float_t GetWaveCorrection(Int_t Type, Float_t Z, Int_t QMax, Float_t Pad, Float_t angleY ) const;
78   static Float_t SGetWaveCorrection(Int_t Type, Float_t Z, Int_t QMax, Float_t Pad, Float_t angleY ){return (fgInstance) ? fgInstance->GetWaveCorrection(Type,Z,QMax,Pad,angleY):0;}
79   //
80   //
81   //
82   void Test(TTree * tree, const char *output="TestClusterParam.root");
83   //
84   // static methods equivalents  - use instance of param object - useful for tree draw and TF2 visualization
85   static Float_t SGetError0(Int_t dim, Int_t type, Float_t z, Float_t angle){
86     return fgInstance->GetError0(dim,type,z,angle);
87   }
88   static Float_t SGetError0Par(Int_t dim, Int_t type, Float_t z, Float_t angle){
89     return fgInstance->GetError0Par(dim,type,z,angle);
90   }
91   static Float_t SGetError1(Int_t dim, Int_t type, Float_t z, Float_t angle){
92     return fgInstance->GetError1(dim,type,z,angle);
93   }
94   static Float_t SGetErrorQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean){
95     return fgInstance->GetErrorQ(dim,type,z,angle,Qmean);
96   }
97   static Float_t SGetErrorQPar(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean){
98     return fgInstance->GetErrorQPar(dim,type,z,angle,Qmean);
99   }
100   static Float_t SGetErrorQParScaled(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean){
101     return fgInstance->GetErrorQParScaled(dim,type,z,angle,Qmean);
102   }
103
104   static Float_t SGetRMS0(Int_t dim, Int_t type, Float_t z, Float_t angle){
105     return fgInstance->GetRMS0(dim,type,z,angle);
106   }
107   static Float_t SGetRMS1(Int_t dim, Int_t type, Float_t z, Float_t angle){
108     return fgInstance->GetRMS1(dim,type,z,angle);
109   }
110   static Float_t SGetRMSQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean){
111     return fgInstance->GetRMSQ(dim,type,z,angle,Qmean);
112   }
113   static Float_t SGetRMSSigma(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean){
114     return fgInstance->GetRMSSigma(dim,type,z,angle,Qmean);
115   }
116   static Float_t SGetShapeFactor(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean, Float_t rmsL, Float_t rmsM){
117     return fgInstance->GetShapeFactor(dim,type,z,angle,Qmean, rmsL, rmsM);
118   }
119   //
120   //
121   static Float_t SQnorm(Int_t ipad, Int_t itype,Float_t dr, Float_t ty, Float_t tz) {return fgInstance->Qnorm(ipad, itype, dr,ty,tz);}
122   static Float_t SQnormHis(Int_t ipad, Int_t itype,Float_t dr, Float_t ty, Float_t tz) {return fgInstance->QnormHis(ipad, itype, dr,ty,tz);}
123
124   //
125   // Analytical position angular correction
126   //
127   static Double_t  GaussConvolution(Double_t x0, Double_t x1, Double_t k0, Double_t k1, Double_t s0, Double_t s1);
128   static Double_t  GaussConvolutionTail(Double_t x0, Double_t x1, Double_t k0, Double_t k1, Double_t s0, Double_t s1, Double_t tau);
129   static Double_t  GaussConvolutionGamma4(Double_t x0, Double_t x1, Double_t k0, Double_t k1, Double_t s0, Double_t s1, Double_t tau);
130   static Double_t QmaxCorrection(Int_t sector, Int_t row, Float_t cpad, Float_t ctime, Float_t ky, Float_t kz, Float_t rmsy0, Float_t rmsz0,  Float_t effLength=0, Float_t effDiff=1);
131   static Double_t QtotCorrection(Int_t sector, Int_t row, Float_t cpad, Float_t ctime, Float_t ky, Float_t kz, Float_t rmsy0, Float_t rmsz0, Float_t qtot, Float_t thr,  Float_t effLength=0, Float_t effDiff=1);
132
133   //
134   //
135   //
136   void FitResol0(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
137   void FitResol0Par(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
138   void FitResol1(TTree * tree, Int_t dim, Float_t *param0, Float_t *error);
139   void FitResolQ(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
140   void FitResolQPar(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
141   void FitRMS0(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
142   void FitRMS1(TTree * tree, Int_t dim, Float_t *param0, Float_t *error);
143   void FitRMSQ(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
144   void FitRMSSigma(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
145   //
146   TVectorD*& PosYcor(Int_t ind) {return fPosYcor[ind];}
147   TVectorD*& PosZcor(Int_t ind) {return fPosZcor[ind];}
148   Float_t ParamS0Par(Int_t i, Int_t j, Int_t k) const {return fParamS0Par[i][j][k];}
149   TVectorD* QpadTnorm() const {return fQpadTnorm;}
150   TVectorD* QpadMnorm() const {return fQpadMnorm;}
151
152 protected:
153   Float_t fRatio;               ///< ratio of values constibution to error
154   Float_t fParamS0[2][3][4];    ///< error parameterization coeficients
155   Float_t fErrorS0[2][3][4];    ///< error parameterization coeficients
156   Float_t fParamS0Par[2][3][7];    ///< error parameterization coeficients
157   Float_t fErrorS0Par[2][3][7];    ///< error parameterization coeficients
158   Float_t fParamSQ[2][3][6];    ///< error parameterization coeficients
159   Float_t fErrorSQ[2][3][6];    ///< error parameterization coeficients
160   Float_t fParamSQPar[2][3][9];    ///< error parameterization coeficients
161   Float_t fErrorSQPar[2][3][9];    ///< error parameterization coeficients
162   Float_t fParamS1[2][4];       ///< error parameterization coeficients
163   Float_t fErrorS1[2][4];       ///< error parameterization coeficients
164   //
165   Float_t fParamRMS0[2][3][4];   ///< shape parameterization coeficients
166   Float_t fErrorRMS0[2][3][4];   ///< shape parameterization coeficients
167   Float_t fParamRMSQ[2][3][6];   ///< shape parameterization coeficients
168   Float_t fErrorRMSQ[2][3][6];   ///< shape parameterization coeficients
169   Float_t fParamRMS1[2][5];      ///< shape parameterization coeficients
170   Float_t fErrorRMS1[2][5];      ///< shape parameterization coeficients
171   Float_t fErrorRMSSys[2];        ///< systematic relative error of the parametererization
172   Float_t fRMSSigmaRatio[2][2];   ///< mean value of the varation of RMS to RMS
173   Float_t fRMSSigmaFit[2][3][2];   ///< mean value of the varation of RMS to RMS
174   //
175   // charge normalization parametrization
176   //
177   TObjArray *fQNorm;              ///< q norm paramters
178   TMatrixD  *fQNormCorr;          ///< q norm correction for analytica  correction
179   TObjArray *fQNormHis;           ///< q norm correction for analytical correction
180   //
181   TVectorD  *fPosQTnorm[3];       ///< q position normalization
182   TVectorD  *fPosQMnorm[3];       ///< q position normalization
183   TVectorD  *fQpadTnorm;          ///< q pad normalization - Total charge
184   TVectorD  *fQpadMnorm;          ///< q pad normalization - Max charge
185   //
186   // Position corrections
187   //
188   TVectorD  *fPosYcor[3];       ///< position correction parameterization
189   TVectorD  *fPosZcor[3];       ///< position correction parameterization
190   //
191   // Wave Correction Map
192   //
193   THnBase* fWaveCorrectionMap; ///< dY with respect to the distance to the center of the pad
194   Bool_t   fWaveCorrectionMirroredPad;   ///< flag is the cog axis mirrored at 0.5
195   Bool_t   fWaveCorrectionMirroredZ;     ///< flag is the Z axis mirrored at 0
196   Bool_t   fWaveCorrectionMirroredAngle; ///< flag is the Angle axis mirrored at 0
197   //
198   // Resolution Map
199   //
200   THnBase* fResolutionYMap; ///< Map of resolution in Y
201   //
202   static AliTPCClusterParam*   fgInstance; //!< Instance of this class (singleton implementation)
203   /// \cond CLASSIMP
204   ClassDef(AliTPCClusterParam,7)    //  TPC Cluster parameter class
205   /// \endcond
206 };
207
208 #endif