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