00001
00002 #ifndef dEdxParameterization_h
00003 #define dEdxParameterization_h
00004
00005 #include "TROOT.h"
00006 #include "TChain.h"
00007 #include "TFile.h"
00008 #include "TH1.h"
00009 #include "TH2.h"
00010 #include "TH3.h"
00011 #include "TProfile2D.h"
00012 #include "TString.h"
00013 class dEdxParameterization {
00014 private:
00015 TString fTag;
00016 TProfile2D *fP;
00017 TProfile2D *fA;
00018 TProfile2D *fI70;
00019 TProfile2D *fI60;
00020 TProfile2D *fD;
00021 TProfile2D *fRms;
00022 TProfile2D *fW;
00023 TH3D *fPhi;
00024 Int_t fnBins[3];
00025 Double_t fbinW[3];
00026 TAxis *fAXYZ[3];
00027 Double_t fMostProbableZShift;
00028 Double_t fAverageZShift;
00029 Double_t fI70Shift;
00030 Double_t fI60Shift;
00031 Double_t fbgL10min;
00032 Double_t fbgL10max;
00033 Double_t fdxL2min;
00034 Double_t fdxL2max;
00035 Double_t fzmin;
00036 Double_t fzmax;
00037 public :
00038 dEdxParameterization(const Char_t *Tag="p10", Int_t keep3D = 0,
00039 const Double_t MostProbableZShift = 0,
00040 const Double_t AverageZShift = 0,
00041 const Double_t I70Shift = 1,
00042 const Double_t I60Shift = 1);
00043 virtual ~dEdxParameterization();
00044 Double_t MostProbableZCorrection(Double_t log10bg);
00045 Double_t I70Correction(Double_t log10bg);
00046 #if ROOT_VERSION_CODE < 334336
00047 Double_t Interpolation(Int_t Narg, TH1 *hist, Double_t *XYZ, Int_t kase = 0);
00048 #endif
00049 Double_t GetMostProbableZ(Double_t log10bg, Double_t log2dx) {
00050 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00051 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00052 return fMostProbableZShift+fP->Interpolate(log10bg,log2dx);
00053 }
00054 Double_t GetAverageZ(Double_t log10bg, Double_t log2dx) {
00055 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00056 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00057 return fAverageZShift+MostProbableZCorrection(log10bg)+fA->Interpolate(log10bg,log2dx);
00058 }
00059 Double_t GetRmsZ(Double_t log10bg, Double_t log2dx) {
00060 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00061 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00062 return fRms->Interpolate(log10bg,log2dx);
00063 }
00064 Double_t GetI70(Double_t log10bg, Double_t log2dx) {
00065 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00066 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00067 return fI70Shift*fI70->Interpolate(log10bg,log2dx);
00068 }
00069 Double_t GetI60(Double_t log10bg, Double_t log2dx) {
00070 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00071 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00072 return fI60Shift*fI60->Interpolate(log10bg,log2dx);
00073 }
00074 Double_t GetMostProbabledEdx(Double_t log10bg, Double_t log2dx) {
00075 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00076 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00077 return fD->Interpolate(log10bg,log2dx);
00078 }
00079 Double_t GetdEdxWidth(Double_t log10bg, Double_t log2dx) {
00080 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00081 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00082 return fW->Interpolate(log10bg,log2dx);
00083 }
00084 Double_t GetMostProbableZM(Double_t log10bg, Double_t log2dx) {
00085 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00086 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00087 return MostProbableZCorrection(log10bg)+GetMostProbableZ(log10bg,log2dx);
00088 }
00089 Double_t GetAverageZM(Double_t log10bg, Double_t log2dx) {
00090 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00091 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00092 return MostProbableZCorrection(log10bg)+GetAverageZ(log10bg,log2dx);
00093 }
00094 Double_t GetI70M(Double_t log10bg, Double_t log2dx) {
00095 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00096 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00097 return I70Correction(log10bg)*GetI70(log10bg,log2dx);
00098 }
00099 #if ROOT_VERSION_CODE < 334336
00100 Double_t Interpolation(TH3 *hist, Double_t X, Double_t Y, Double_t Z, Int_t kase = 0);
00101 Double_t GetProbability(Double_t log10bg, Double_t log2dx, Double_t z, Int_t kase=0) {
00102 return Interpolation(fPhi,log10bg,log2dx,z,kase);}
00103 #else
00104 Double_t GetProbability(Double_t log10bg, Double_t log2dx, Double_t z) {
00105 log10bg = TMath::Max(fbgL10min, TMath::Min(fbgL10max,log10bg));
00106 log2dx = TMath::Max(fdxL2min, TMath::Min(fdxL2max,log2dx));
00107 z = TMath::Max(fzmin, TMath::Min(fzmax,z));
00108 return fPhi->Interpolate(log10bg,log2dx,z);}
00109 #endif
00110 void Print();
00111 const Char_t *Tag() const {return fTag.Data();}
00112 const TProfile2D *P() const {return fP;}
00113 const TProfile2D *A() const {return fA;}
00114 const TProfile2D *I70() const {return fI70;}
00115 const TProfile2D *I60() const {return fI60;}
00116 const TProfile2D *D() const {return fD;}
00117 const TProfile2D *Rms() const {return fRms;}
00118 const TProfile2D *W() const {return fW;}
00119 const TH3D *Phi() const {return fPhi;}
00120 Double_t bgL10min() const {return fbgL10min;}
00121 Double_t bgL10max() const {return fbgL10max;}
00122 ClassDef(dEdxParameterization,0)
00123 };
00124 #endif
00125