00001 #ifndef QinvEbyECorrFctn_hh
00002 #define QinvEbyECorrFctn_hh
00003
00004 #include "StHbtMaker/Base/StHbtCorrFctn.hh"
00005 #include "StHbtMaker/Infrastructure/StHbtTypes.hh"
00006 #include "StHbtMaker/Infrastructure/StHbtTagWriter.hh"
00007
00008 struct twoFit {
00009 float lambda;
00010 float lambdaErr;
00011 float radius;
00012 float radiusErr;
00013 float chi2;
00014 float ndf;
00015 };
00016
00017 struct threeFit {
00018 float constant;
00019 float constantErr;
00020 float lambda;
00021 float lambdaErr;
00022 float radius;
00023 float radiusErr;
00024 float chi2;
00025 float ndf;
00026 };
00027
00028 class QinvEbyECorrFctn : public StHbtCorrFctn {
00029 public:
00030
00031
00032 QinvEbyECorrFctn(char* title, const int& nbins, const float& QinvLo, const float& QinvHi);
00033 virtual ~QinvEbyECorrFctn();
00034
00035 virtual StHbtString Report();
00036 virtual void AddRealPair(const StHbtPair*);
00037 virtual void AddMixedPair(const StHbtPair*);
00038 virtual void EventEnd(const StHbtEvent*);
00039 virtual void EventBegin(const StHbtEvent*);
00040 virtual void Finish();
00041
00042 StHbt1DHisto* Numerator();
00043 StHbt1DHisto* Denominator();
00044 StHbt1DHisto* Ratio();
00045 StHbt1DHisto* Correction();
00046
00047
00048 StHbt1DHisto* IntNumerator();
00049 StHbt1DHisto* IntDenominator();
00050 StHbt1DHisto* IntRatio();
00051
00052
00053 StHbt1DHisto* threeFitLambda();
00054 StHbt1DHisto* threeFitRadius();
00055 StHbt1DHisto* twoFitLambda();
00056 StHbt1DHisto* twoFitRadius();
00057 StHbt1DHisto* rmsByHandMeV();
00058 StHbt1DHisto* rmsByHandFm();
00059
00060
00061 void Rms_by_hand(double& Width_MeV, double& Width_fm) ;
00062 void Three_param_fit(threeFit&,StHbt1DHisto*);
00063 void Two_param_fit(twoFit&) ;
00064
00065
00066 double Norm_by_integral(double,double) ;
00067 double Norm_by_fit(double,double) ;
00068
00069
00070 void Fill_ratio_artificial();
00071 void Fill_ratio_artificial_random();
00072
00073
00074 void SetTagMeans( const char* );
00075 void SetTagSigmas( const char* );
00076
00077
00078 void SetCorrection( const StHbt1DHisto* );
00079
00080 private:
00081 char* mTagMeans;
00082 char* mTagSigmas;
00083
00084
00085 StHbt1DHisto* mNumerator;
00086 StHbt1DHisto* mDenominator;
00087 StHbt1DHisto* mRatio;
00088 StHbt1DHisto* mCorrection;
00089
00090
00091 StHbt1DHisto* mIntNumerator;
00092 StHbt1DHisto* mIntDenominator;
00093 StHbt1DHisto* mIntRatio;
00094
00095
00096 StHbt1DHisto* mThreeFitLambda;
00097 StHbt1DHisto* mThreeFitRadius;
00098 StHbt1DHisto* mTwoFitLambda;
00099 StHbt1DHisto* mTwoFitRadius;
00100 StHbt1DHisto* mRmsByHandMeV;
00101 StHbt1DHisto* mRmsByHandFm;
00102
00103
00104 int m_Debug_ebye ;
00105
00106
00107
00108 #ifdef __ROOT__
00109 ClassDef(QinvEbyECorrFctn, 0)
00110 #endif
00111 };
00112
00113
00114 inline void QinvEbyECorrFctn::SetTagMeans( const char* c){ mTagMeans=(char*)c;}
00115 inline void QinvEbyECorrFctn::SetTagSigmas( const char* c){ mTagSigmas=(char*)c;}
00116
00117 inline StHbt1DHisto* QinvEbyECorrFctn::Numerator(){return mNumerator;}
00118 inline StHbt1DHisto* QinvEbyECorrFctn::Denominator(){return mDenominator;}
00119 inline StHbt1DHisto* QinvEbyECorrFctn::Ratio(){return mRatio;}
00120 inline StHbt1DHisto* QinvEbyECorrFctn::Correction(){return mCorrection;}
00121
00122 inline StHbt1DHisto* QinvEbyECorrFctn::IntNumerator(){return mIntNumerator;}
00123 inline StHbt1DHisto* QinvEbyECorrFctn::IntDenominator(){return mIntDenominator;}
00124 inline StHbt1DHisto* QinvEbyECorrFctn::IntRatio(){return mIntRatio;}
00125
00126 inline StHbt1DHisto* QinvEbyECorrFctn::threeFitLambda(){return mThreeFitLambda;}
00127 inline StHbt1DHisto* QinvEbyECorrFctn::threeFitRadius(){return mThreeFitRadius;}
00128 inline StHbt1DHisto* QinvEbyECorrFctn::twoFitLambda(){return mTwoFitLambda;}
00129 inline StHbt1DHisto* QinvEbyECorrFctn::twoFitRadius(){return mTwoFitRadius;}
00130 inline StHbt1DHisto* QinvEbyECorrFctn::rmsByHandMeV(){return mRmsByHandMeV;}
00131 inline StHbt1DHisto* QinvEbyECorrFctn::rmsByHandFm(){return mRmsByHandFm;}
00132
00133 #endif