]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCClusterParam.h
1. Protection against 0 error estimate
[u/mrichter/AliRoot.git] / TPC / AliTPCClusterParam.h
index f963496490aa455ad1bc31ec48b437fed2f317eb..805608288707e4940af7c2378eb5230492b7b1b6 100644 (file)
 
 
 #include <TObject.h>
-#include <TVectorD.h>
+#include <TVectorDfwd.h>
+#include <TMatrixDfwd.h>
 
 class TTree;
 class TObjArray;
+class TH1;
+class THnBase;
 //_____________________________________________________________________________
 class AliTPCClusterParam : public TObject {
  public:
   static AliTPCClusterParam* Instance();
   AliTPCClusterParam();
   AliTPCClusterParam(const AliTPCClusterParam& param);
-  AliTPCClusterParam & operator=(const AliTPCClusterParam&);
+  AliTPCClusterParam & operator=(const AliTPCClusterParam& param);
   virtual           ~AliTPCClusterParam();
   virtual void Print(Option_t* option = "") const;
-  void SetInstance(AliTPCClusterParam*param){fgInstance = param;}
+  void SetInstance(AliTPCClusterParam *const param){fgInstance = param;}
   //
   // Seting functions
   //
   void FitData(TTree * tree);
   void FitResol(TTree * tree);
   void FitRMS(TTree * tree);
-  void SetQnorm(Int_t ipad, Int_t itype,  TVectorD * norm); 
+  void SetQnorm(Int_t ipad, Int_t itype,  const TVectorD *const norm); 
+  void SetQnormCorr(Int_t ipad, Int_t itype, Int_t corrType, Float_t val); 
+  Double_t  GetQnormCorr(Int_t ipad, Int_t itype, Int_t corrType) const;
+  TMatrixD *GetQnormCorrMatrix(){return fQNormCorr;};
+  void ResetQnormCorr(); 
+  void SetWaveCorrectionMap( THnBase *WaveCorrectionMap);
+  void SetResolutionYMap( THnBase *ResolutionYMap);
   //
   // Charge parameterization
   //
   Float_t Qnorm(Int_t ipad, Int_t itype, Float_t dr, Float_t ty, Float_t tz);   
+  Float_t QnormHis(Int_t ipad, Int_t itype, Float_t dr, Float_t ty, Float_t tz);
+
 
   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);
   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);;}
@@ -47,20 +58,27 @@ class AliTPCClusterParam : public TObject {
   //
   // Error parameterization
   //
-  Float_t GetError0(Int_t dim, Int_t type, Float_t z, Float_t angle);
-  Float_t GetError0Par(Int_t dim, Int_t type, Float_t z, Float_t angle);
-  Float_t GetError1(Int_t dim, Int_t type, Float_t z, Float_t angle);
-  Float_t GetErrorQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean);
-  Float_t GetErrorQPar(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean);
-  Float_t GetErrorQParScaled(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean);
+  Float_t GetError0(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
+  Float_t GetError0Par(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
+  Float_t GetError1(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
+  Float_t GetErrorQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
+  Float_t GetErrorQPar(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
+  Float_t GetErrorQParScaled(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
   //
   // Shape parameterization
   //
-  Float_t GetRMS0(Int_t dim, Int_t type, Float_t z, Float_t angle);
-  Float_t GetRMS1(Int_t dim, Int_t type, Float_t z, Float_t angle);
-  Float_t GetRMSQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean);
-  Float_t GetRMSSigma(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean);
-  Float_t GetShapeFactor(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean, Float_t rmsL, Float_t rmsM);
+  Float_t GetRMS0(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
+  Float_t GetRMS1(Int_t dim, Int_t type, Float_t z, Float_t angle) const;
+  Float_t GetRMSQ(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
+  Float_t GetRMSSigma(Int_t dim, Int_t type, Float_t z, Float_t angle, Float_t Qmean) const;
+  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;
+  // 
+  // Correction and resolution maps
+  //
+  const THnBase *GetWaveCorrectionMap() const { return fWaveCorrectionMap; }
+  const THnBase *GetResolutionYMap() const { return  fResolutionYMap; }
+  Float_t GetWaveCorrection(Int_t Type, Float_t Z, Int_t QMax, Float_t Pad, Float_t angleY ) const;
+  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;}
   //
   //
   //
@@ -104,6 +122,7 @@ class AliTPCClusterParam : public TObject {
   //
   //
   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);}
+  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);}
 
   //
   // Analytical position angular correction
@@ -111,12 +130,9 @@ class AliTPCClusterParam : public TObject {
   static Double_t  GaussConvolution(Double_t x0, Double_t x1, Double_t k0, Double_t k1, Double_t s0, Double_t s1);
   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);
   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);
-  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 tau);
-  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 tau);
-
-
+  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);
+  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);
 
- public: 
   //
   //
   //
@@ -130,7 +146,13 @@ class AliTPCClusterParam : public TObject {
   void FitRMSQ(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);  
   void FitRMSSigma(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);  
   //
+  TVectorD*& PosYcor(Int_t ind) {return fPosYcor[ind];}
+  TVectorD*& PosZcor(Int_t ind) {return fPosZcor[ind];}
+  Float_t ParamS0Par(Int_t i, Int_t j, Int_t k) const {return fParamS0Par[i][j][k];}
+  TVectorD* QpadTnorm() const {return fQpadTnorm;}
+  TVectorD* QpadMnorm() const {return fQpadMnorm;}
 
+protected:
   Float_t fRatio;               //ratio of values constibution to error
   Float_t fParamS0[2][3][4];    //error parameterization coeficients
   Float_t fErrorS0[2][3][4];    //error parameterization coeficients
@@ -156,6 +178,8 @@ class AliTPCClusterParam : public TObject {
   // charge normalization parametrization
   //
   TObjArray *fQNorm;              // q norm paramters
+  TMatrixD  *fQNormCorr;          // q norm correction for analytica  correction
+  TObjArray *fQNormHis;           // q norm correction for analytical correction 
   //
   TVectorD  *fPosQTnorm[3];       // q position normalization
   TVectorD  *fPosQMnorm[3];       // q position normalization
@@ -167,9 +191,19 @@ class AliTPCClusterParam : public TObject {
   TVectorD  *fPosYcor[3];       //  position correction parameterization 
   TVectorD  *fPosZcor[3];       //  position correction parameterization
   //
- protected:
+  // Wave Correction Map 
+  //
+  THnBase* fWaveCorrectionMap; //dY with respect to the distance to the center of the pad
+  Bool_t   fWaveCorrectionMirroredPad;   // flag is the cog axis mirrored at 0.5
+  Bool_t   fWaveCorrectionMirroredZ;     // flag is the Z axis mirrored at 0
+  Bool_t   fWaveCorrectionMirroredAngle; // flag is the Angle axis mirrored at 0
+  //
+  // Resolution Map
+  //
+  THnBase* fResolutionYMap; // Map of resolution in Y
+  //
   static AliTPCClusterParam*   fgInstance; //! Instance of this class (singleton implementation)
-  ClassDef(AliTPCClusterParam,3)    //  TPC Cluster parameter class
+  ClassDef(AliTPCClusterParam,7)    //  TPC Cluster parameter class
 };
 
 #endif