00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef ST_HBT_TH_PAIR_HH
00025 #define ST_HBT_TH_PAIR_HH
00026
00027
00028 #include "StHbtMaker/Infrastructure/StHbtPair.hh"
00029 #include "StHbtMaker/Infrastructure/StHbtTypes.hh"
00030
00031 class StHbtFsiWeight;
00032
00033 class StHbtThPair {
00034 public:
00035
00036 StHbtThPair();
00037 virtual ~StHbtThPair(){};
00038
00039 virtual void Set(const StHbtPair*);
00040 virtual void SetWeight(StHbtFsiWeight*);
00041
00042 virtual const StHbtLorentzVector* GetRealMomentum1() const;
00043 virtual const StHbtLorentzVector* GetRealMomentum2() const;
00044 virtual const StHbtLorentzVector* GetMeasMomentum1() const;
00045 virtual const StHbtLorentzVector* GetMeasMomentum2() const;
00046 virtual const StHbtLorentzVector* GetEmPoint1() const;
00047 virtual const StHbtLorentzVector* GetEmPoint2() const;
00048 virtual int GetPid1() const;
00049 virtual int GetPid2() const;
00050 virtual const StHbtPair* GetMeasPair() const;
00051 virtual double GetWeightNum() ;
00052 virtual double GetWeightDen() ;
00053 virtual StHbtString Report();
00054 virtual double RealQInv() const;
00055 double RealqSideCMS() const;
00056 double RealqOutCMS() const;
00057 double RealqLongCMS() const;
00058 double RealqSidePf() const;
00059 double RealqOutPf() const;
00060 double RealqLongPf() const;
00061
00062
00063 virtual void set(const StHbtPair*);
00064 void setMomRes1(int pid);
00065 void setMomRes2(int pid);
00066 void setPairPurity(double aPairPurity);
00067 virtual StHbtLorentzVector const* getMomentum1() const;
00068 virtual StHbtLorentzVector const* getMomentum2() const;
00069 virtual StHbtLorentzVector const* getEmPoint1() const;
00070 virtual StHbtLorentzVector const* getEmPoint2() const;
00071 virtual int getPid1() const;
00072 virtual int getPid2() const;
00073 virtual double QInv() const;
00074
00075 double KStarSide() const;
00076 double KStarOut() const;
00077 double KStarLong() const;
00078 double KStar() const;
00079 double CVK() const;
00080 double KStarFlipped() const;
00081 double CVKFlipped() const;
00082 double RStar() const;
00083 double RTrans() const;
00084 double ROut() const;
00085 double RLong() const;
00086 double RSide() const;
00087 double DTime() const;
00088 double DTimePairLCMS() const;
00089 double ROutPairCMS() const;
00090 double RLongPairCMS() const;
00091 double RSidePairCMS() const;
00092 double DTimePairCMS() const;
00093
00094 double Betat() const;
00095 double Ut() const;
00096 double Pt() const;
00097
00098 protected:
00099 virtual void setVariables(const StHbtPair*);
00100
00101 const StHbtLorentzVector* mMomentum1;
00102 const StHbtLorentzVector* mMomentum2;
00103 StHbtLorentzVector* mEmPoint1;
00104 StHbtLorentzVector* mEmPoint2;
00105 int mPid1;
00106 int mPid2;
00107
00108 const StHbtPair* mMeasPair;
00109
00110 StHbtFsiWeight* mWeight;
00111 double mWeightNum;
00112 double mWeightDen;
00113 bool mWeightOk;
00114 void UpdateWeight();
00115
00116 mutable short mMomParCalculated;
00117 void calcMomParameters() const;
00118 mutable double mKStarSide;
00119 mutable double mKStarOut;
00120 mutable double mKStarLong;
00121 mutable double mKStar;
00122 mutable double mCVK;
00123 mutable double mKStarFlipped;
00124 mutable double mCVKFlipped;
00125 mutable double mBetat;
00126 mutable double mUt;
00127 mutable double mPt;
00128
00129 mutable short mPosParCalculated;
00130 void calcPosParameters() const;
00131 mutable double mRStar;
00132 mutable double mRTrans;
00133 mutable double mROut;
00134 mutable double mRSide;
00135 mutable double mRLong;
00136 mutable double mDTime;
00137 mutable double mDTimePairLCMS;
00138 mutable double mROutPairCMS;
00139 mutable double mRSidePairCMS;
00140 mutable double mRLongPairCMS;
00141 mutable double mDTimePairCMS;
00142
00143 short mMomRes1;
00144 short mMomRes2;
00145
00146 double mPLoss1[3];
00147 double mPtRes1[3];
00148 double mPhiRes1[3];
00149 double mThetaRes1[3];
00150 double mPLoss2[3];
00151 double mPtRes2[3];
00152 double mPhiRes2[3];
00153 double mThetaRes2[3];
00154
00155
00156
00157 double mPairPurity;
00158
00159 #ifdef __ROOT__
00160 ClassDef(StHbtThPair,1)
00161 #endif
00162 };
00163
00164
00165 inline const StHbtLorentzVector* StHbtThPair::GetRealMomentum1() const
00166 {return mMomentum1;};
00167 inline const StHbtLorentzVector* StHbtThPair::GetRealMomentum2() const
00168 {return mMomentum2;};
00169 inline const StHbtLorentzVector* StHbtThPair::GetMeasMomentum1() const
00170 {return (StHbtLorentzVector*)(&(mMeasPair->track1()->FourMomentum()));};
00171 inline const StHbtLorentzVector* StHbtThPair::GetMeasMomentum2() const
00172 {return (StHbtLorentzVector*)(&(mMeasPair->track2()->FourMomentum()));};
00173 inline const StHbtLorentzVector* StHbtThPair::GetEmPoint1() const
00174 {return mEmPoint1;};
00175 inline const StHbtLorentzVector* StHbtThPair::GetEmPoint2() const
00176 {return mEmPoint2;};
00177 inline int StHbtThPair::GetPid1() const {return mPid1;};
00178 inline int StHbtThPair::GetPid2() const {return mPid2;};
00179 inline const StHbtPair* StHbtThPair::GetMeasPair() const
00180 {return mMeasPair;};
00181 inline double StHbtThPair::GetWeightNum() {
00182 if (!(mWeightOk)) UpdateWeight();
00183 return mWeightNum;}
00184 inline double StHbtThPair::GetWeightDen() {
00185 if (!(mWeightOk)) UpdateWeight();
00186 return mWeightDen;};
00187
00188 inline void StHbtThPair::SetWeight(StHbtFsiWeight* aWeight)
00189 {mWeight=aWeight;};
00190 inline double StHbtThPair::RealQInv() const{
00191 return abs(*mMomentum1-*mMomentum2);
00192 }
00193
00194 inline void StHbtThPair::setPairPurity(double aPairPurity){
00195 mPairPurity=aPairPurity;
00196 }
00197 inline void StHbtThPair::Set(const StHbtPair* aPair){
00198 mMomParCalculated=0;
00199 mPosParCalculated=0;
00200 mWeightOk=false;
00201 mMeasPair=aPair;
00202 setVariables(aPair);
00203
00204
00205
00206 }
00207
00208 inline void StHbtThPair::set(const StHbtPair* aPair){
00209 static StHbtParticle* tPrevPart1;
00210 static StHbtParticle* tPrevPart2;
00211 if(tPrevPart1 != aPair->track1() || tPrevPart2 != aPair->track2()){
00212 mWeightOk=false;
00213 mMeasPair=aPair;
00214 setVariables(aPair);
00215 calcMomParameters();
00216 calcPosParameters();
00217 }
00218 tPrevPart1 = aPair->track1();
00219 tPrevPart2 = aPair->track2();
00220
00221
00222 }
00223 inline StHbtLorentzVector const* StHbtThPair::getMomentum1() const
00224 {return mMomentum1;};
00225 inline StHbtLorentzVector const* StHbtThPair::getMomentum2() const
00226 {return mMomentum2;};
00227 inline StHbtLorentzVector const* StHbtThPair::getEmPoint1() const
00228 {return mEmPoint1;};
00229 inline StHbtLorentzVector const* StHbtThPair::getEmPoint2() const
00230 {return mEmPoint2;};
00231 inline int StHbtThPair::getPid1() const {return mPid1;};
00232 inline int StHbtThPair::getPid2() const {return mPid2;};
00233
00234 inline double StHbtThPair::QInv() const{
00235 return abs((*mMomentum1)-(*mMomentum2));
00236 }
00237
00238 inline double StHbtThPair::KStarSide() const{
00239 if(!mMomParCalculated) calcMomParameters();
00240 return mKStarSide;
00241 }
00242 inline double StHbtThPair::KStarOut() const{
00243 if(!mMomParCalculated) calcMomParameters();
00244 return mKStarOut;
00245 }
00246 inline double StHbtThPair::KStarLong() const{
00247 if(!mMomParCalculated) calcMomParameters();
00248 return mKStarLong;
00249 }
00250 inline double StHbtThPair::KStar() const{
00251 if(!mMomParCalculated) calcMomParameters();
00252 return mKStar;
00253 }
00254 inline double StHbtThPair::CVK() const{
00255 if(!mMomParCalculated) calcMomParameters();
00256 return mCVK;
00257 }
00258 inline double StHbtThPair::KStarFlipped() const{
00259 if(!mMomParCalculated) calcMomParameters();
00260 return mKStarFlipped;
00261 }
00262 inline double StHbtThPair::CVKFlipped() const{
00263 if(!mMomParCalculated) calcMomParameters();
00264 return mCVKFlipped;
00265 }
00266 inline double StHbtThPair::Betat() const{
00267 if(!mMomParCalculated) calcMomParameters();
00268 return mBetat;
00269 }
00270 inline double StHbtThPair::Ut() const{
00271 if(!mMomParCalculated) calcMomParameters();
00272 return mUt;
00273 }
00274 inline double StHbtThPair::Pt() const{
00275 if(!mMomParCalculated) calcMomParameters();
00276 return mPt;
00277 }
00278
00279 inline double StHbtThPair::RStar() const{
00280 if(!mPosParCalculated){ calcPosParameters(); }
00281 return mRStar;
00282 }
00283 inline double StHbtThPair::RTrans() const{
00284 if(!mPosParCalculated){ calcPosParameters(); }
00285 return mRTrans;
00286 }
00287 inline double StHbtThPair::ROut() const{
00288 if(!mPosParCalculated){ calcPosParameters(); }
00289 return mROut;
00290 }
00291 inline double StHbtThPair::RLong() const{
00292 if(!mPosParCalculated){ calcPosParameters(); }
00293 return mRLong;
00294 }
00295 inline double StHbtThPair::RSide() const{
00296 if(!mPosParCalculated){ calcPosParameters(); }
00297 return mRSide;
00298 }
00299 inline double StHbtThPair::DTime() const{
00300 if(!mPosParCalculated){ calcPosParameters(); }
00301 return mDTime;
00302 }
00303 inline double StHbtThPair::DTimePairLCMS() const{
00304 if(!mPosParCalculated){ calcPosParameters(); }
00305 return mDTimePairLCMS;
00306 }
00307 inline double StHbtThPair::ROutPairCMS() const{
00308 if(!mPosParCalculated){ calcPosParameters(); }
00309 return mROutPairCMS;
00310 }
00311 inline double StHbtThPair::RLongPairCMS() const{
00312 if(!mPosParCalculated){ calcPosParameters(); }
00313 return mRLongPairCMS;
00314 }
00315 inline double StHbtThPair::RSidePairCMS() const{
00316 if(!mPosParCalculated){ calcPosParameters(); }
00317 return mRSidePairCMS;
00318 }
00319 inline double StHbtThPair::DTimePairCMS() const{
00320 if(!mPosParCalculated){ calcPosParameters(); }
00321 return mDTimePairCMS;
00322 }
00323
00324 #endif