LCOV - code coverage report
Current view: top level - TPC/TPCbase - AliTPCClusterParam.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 26 3.8 %
Date: 2016-06-14 17:26:59 Functions: 2 30 6.7 %

          Line data    Source code
       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           0 :   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           0 :   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           0 :   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           0 :   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           0 :   const THnBase *GetWaveCorrectionMap() const { return fWaveCorrectionMap; }
      76           0 :   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           0 :   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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     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           0 :     return fgInstance->GetShapeFactor(dim,type,z,angle,Qmean, rmsL, rmsM);
     118             :   }
     119             :   //
     120             :   //
     121           0 :   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           0 :   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           0 :   TVectorD*& PosYcor(Int_t ind) {return fPosYcor[ind];}
     147           0 :   TVectorD*& PosZcor(Int_t ind) {return fPosZcor[ind];}
     148           0 :   Float_t ParamS0Par(Int_t i, Int_t j, Int_t k) const {return fParamS0Par[i][j][k];}
     149           0 :   TVectorD* QpadTnorm() const {return fQpadTnorm;}
     150           0 :   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          48 :   ClassDef(AliTPCClusterParam,7)    //  TPC Cluster parameter class
     205             :   /// \endcond
     206             : };
     207             : 
     208             : #endif

Generated by: LCOV version 1.11