]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCClusterParam.h
AliTPCClusterParam.h -> simple Getter for Matrix
[u/mrichter/AliRoot.git] / TPC / AliTPCClusterParam.h
index f139c0fe63437a8c1ac668d2d96b1913ad0072e6..63c45665b3439f0577ec25bdc4be58a14432e607 100644 (file)
 
 
 #include <TObject.h>
-#include <TVectorD.h>
+#include <TVectorDfwd.h>
+#include <TMatrixDfwd.h>
 
 class TTree;
 class TObjArray;
+class TH1;
 //_____________________________________________________________________________
 class AliTPCClusterParam : public TObject {
  public:
   static AliTPCClusterParam* Instance();
-  AliTPCClusterParam(){fRatio=0.01; fQNorm=0;}
-  virtual           ~AliTPCClusterParam(){;}
+  AliTPCClusterParam();
+  AliTPCClusterParam(const AliTPCClusterParam& param);
+  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);
-  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 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);
+  void FitResol(TTree * tree);
+  void FitRMS(TTree * tree);
+  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(); 
+  //
+  // 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);;}
+  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);
+  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);}
+  //
+  // Error parameterization
+  //
+  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) 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;
+  //
+  //
+  //
   void Test(TTree * tree, const char *output="TestClusterParam.root");
   //
   // static methods equivalents  - use instance of param object - useful for tree draw and TF2 visualization 
@@ -77,15 +111,21 @@ class AliTPCClusterParam : public TObject {
   }
   //
   //
-  void FitResol(TTree * tree);
-  void FitRMS(TTree * tree);
-  Float_t Qnorm(Int_t ipad, Int_t itype, Float_t dr, Float_t ty, Float_t tz); 
   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);}
 
-  void SetQnorm(Int_t ipad, Int_t itype,  TVectorD * norm); 
-
+  //
+  // Analytical position angular correction
+  //
+  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 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);
 
- protected: 
+  //
+  //
+  //
   void FitResol0(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
   void FitResol0Par(TTree * tree, Int_t dim, Int_t type, Float_t *param0, Float_t *error);
   void FitResol1(TTree * tree, Int_t dim, Float_t *param0, Float_t *error);
@@ -96,7 +136,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
@@ -119,10 +165,24 @@ class AliTPCClusterParam : public TObject {
   Float_t fRMSSigmaRatio[2][2];   // mean value of the varation of RMS to RMS
   Float_t fRMSSigmaFit[2][3][2];   // mean value of the varation of RMS to RMS
   //
+  // charge normalization parametrization
+  //
   TObjArray *fQNorm;              // q norm paramters
- protected:
+  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
+  TVectorD  *fQpadTnorm;          // q pad normalization - Total charge
+  TVectorD  *fQpadMnorm;          // q pad normalization - Max charge
+  //
+  // Position corrections
+  // 
+  TVectorD  *fPosYcor[3];       //  position correction parameterization 
+  TVectorD  *fPosZcor[3];       //  position correction parameterization
+  //
   static AliTPCClusterParam*   fgInstance; //! Instance of this class (singleton implementation)
-  ClassDef(AliTPCClusterParam,2)    //  TPC Cluster parameter class
+  ClassDef(AliTPCClusterParam,6)    //  TPC Cluster parameter class
 };
 
 #endif