X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCClusterParam.h;h=63c45665b3439f0577ec25bdc4be58a14432e607;hb=56b51ad9d25579100d1371343d813fd0d1cb8305;hp=f139c0fe63437a8c1ac668d2d96b1913ad0072e6;hpb=0a65832b0a7ac52c2914af57d0e353db01319e23;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCClusterParam.h b/TPC/AliTPCClusterParam.h index f139c0fe634..63c45665b34 100644 --- a/TPC/AliTPCClusterParam.h +++ b/TPC/AliTPCClusterParam.h @@ -13,31 +13,65 @@ #include -#include +#include +#include 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