00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef YKPLongitudinal_hh
00013 #define YKPLongitudinal_hh
00014
00015 #include "StHbtMaker/Base/StHbtCorrFctn.hh"
00016 #include "StHbtMaker/Infrastructure/StHbtCoulomb.h"
00017 #include "StHbtMaker/Base/StHbtPairCut.h"
00018
00019 class YKPLongitudinal : public StHbtCorrFctn {
00020
00021 public:
00022
00023 YKPLongitudinal(TString ctype, TString frame, const int& nbins, const float& QLo, const float& QHi,
00024 const int& nKtbins, const double& ktMin, const double& ktMax,
00025 const int& nYbins, const double& YMin, const double& YMax,
00026 const int& nbinsQINV = 100, const float& QLoQINV = 0.0, const float& QHiQINV = 0.2 ) ;
00027 virtual ~YKPLongitudinal() ;
00028
00029 virtual StHbtString Report() ;
00030
00031 virtual void AddRealPair(const StHbtPair*) ;
00032 virtual void AddMixedPair(const StHbtPair*) ;
00033
00034 virtual void Finish() ;
00035
00036
00037 StHbt3DHisto* Numerator(const int ktBin, const int yBin ) ;
00038 StHbt3DHisto* Denominator(const int ktBin, const int yBin ) ;
00039 StHbt3DHisto* Ratio(const int ktBin, const int yBin ) ;
00040 StHbt1DHisto* QinvNumerator(const int ktBin, const int yBin ) ;
00041 StHbt1DHisto* QinvDenominator(const int ktBin, const int yBin ) ;
00042 StHbt1DHisto* QinvRatio(const int ktBin, const int yBin ) ;
00043
00044
00045
00046
00047
00048 void SetNormRangeLo(float qLo) ;
00049 void SetNormRangeHi(float qHi) ;
00050 float GetNormRangeLo() ;
00051 float GetNormRangeHi() ;
00052 double GetNorm(const int ktBin, const int yBin ) ;
00053
00054
00055 void SetCoulombCorrection(StHbtCoulomb* Correction) ;
00056
00057
00058 private:
00059
00060 StHbt3DHisto* mNumerator ;
00061 StHbt3DHisto* mDenominator ;
00062 StHbt3DHisto* mRatio ;
00063 StHbt1DHisto* mQinvNumerator ;
00064 StHbt1DHisto* mQinvDenominator ;
00065 StHbt1DHisto* mQinvRatio ;
00066
00067 int mNumberKtBins ;
00068 int mNumberYBins ;
00069 int mNumberBins ;
00070 double* mktBinsMin ;
00071 double* mktBinsMax ;
00072 double* mYBinsMin ;
00073 double* mYBinsMax ;
00074
00075
00076 TString mFrame ;
00077 TString mCtype ;
00078
00079
00080 float mQinvNormLo ;
00081 float mQinvNormHi ;
00082
00083
00084 unsigned long int* mNumRealsNorm ;
00085 unsigned long int* mNumMixedNorm ;
00086
00087
00088 StHbtCoulomb* mCorrection;
00089
00090
00091 #ifdef __ROOT__
00092 ClassDef(YKPLongitudinal, 1)
00093 #endif
00094 };
00095
00096
00097 inline StHbt3DHisto* YKPLongitudinal::Numerator(const int ktBin, const int yBin) {return &mNumerator[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00098 inline StHbt3DHisto* YKPLongitudinal::Denominator(const int ktBin, const int yBin) {return &mDenominator[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00099 inline StHbt3DHisto* YKPLongitudinal::Ratio(const int ktBin, const int yBin) {return &mRatio[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00100 inline StHbt1DHisto* YKPLongitudinal::QinvNumerator(const int ktBin, const int yBin) {return &mQinvNumerator[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00101 inline StHbt1DHisto* YKPLongitudinal::QinvDenominator(const int ktBin, const int yBin){return &mQinvDenominator[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00102 inline StHbt1DHisto* YKPLongitudinal::QinvRatio(const int ktBin, const int yBin) {return &mQinvRatio[(ktBin-1)+(yBin-1)*mNumberKtBins];}
00103
00104
00105 inline void YKPLongitudinal::SetNormRangeLo(float qLo){mQinvNormLo = qLo;}
00106 inline void YKPLongitudinal::SetNormRangeHi(float qHi){mQinvNormHi = qHi;}
00107 inline float YKPLongitudinal::GetNormRangeLo(){return mQinvNormLo;}
00108 inline float YKPLongitudinal::GetNormRangeHi(){return mQinvNormHi;}
00109 inline double YKPLongitudinal::GetNorm(const int ktBin, const int yBin){return (double)mNumRealsNorm[ktBin+yBin*mNumberKtBins]/(double)mNumMixedNorm[ktBin+yBin*mNumberKtBins];}
00110 inline void YKPLongitudinal::SetCoulombCorrection(StHbtCoulomb* Correction){mCorrection = Correction;}
00111 #endif