00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "StHbtMaker/ThCorrFctn/StHbtThPairGauss.h"
00017 #include "StHbtMaker/ThCorrFctn/StHbtEvtGenHiddenInfo.hh"
00018 #include "StHbtMaker/Infrastructure/StHbtParticle.hh"
00019 #include "StHbtMaker/Base/StHbtFsiWeight.hh"
00020
00021 #ifdef __ROOT__
00022 ClassImp(StHbtThPairGauss)
00023 #endif
00024
00025 StHbtThPairGauss::StHbtThPairGauss() : StHbtThPair(){
00026 mEmPoint1=&mPos1;
00027 mEmPoint2=&mPos2;
00028 mUseHidMom=false;
00029 mUseHidPid=false;
00030 mMomentum1=&mMom1;
00031 mMomentum2=&mMom2;
00032 mRef=RCMS;
00033 mSizeX=mSizeY=mSizeZ=1.;
00034 mTime=0;
00035 mBetaRCMS=0.;
00036 mGammaRCMS=1.;
00037 };
00038
00039 StHbtThPairGauss::~StHbtThPairGauss()
00040 { };
00041
00042 void StHbtThPairGauss::Set(const StHbtPair* aPair){
00043 SetMomentum_PID (aPair);
00044 SetPosition();
00045 BoostPosition();
00046
00047 mMomParCalculated=0;
00048 mPosParCalculated=0;
00049
00050 mMeasPair=aPair;
00051 mWeightOk=false;
00052
00053 }
00054
00055 void StHbtThPairGauss::SetMomentum_PID( const StHbtPair* aPair ){
00056
00057 const StHbtEvtGenHiddenInfo* tEvtGenHidInf1=0;
00058 const StHbtEvtGenHiddenInfo* tEvtGenHidInf2=0;
00059 if (mUseHidMom||mUseHidPid) {
00060 tEvtGenHidInf1=dynamic_cast<const StHbtEvtGenHiddenInfo*>
00061 (aPair->track1()->HiddenInfo());
00062 tEvtGenHidInf2=dynamic_cast<const StHbtEvtGenHiddenInfo*>
00063 (aPair->track2()->HiddenInfo());
00064 if ((tEvtGenHidInf1==0)||(tEvtGenHidInf2==0)) {
00065 cout << "Fatal Error in StHbtThPairGauss : "<< endl;
00066 cout << " HiddenInfo does NOT inherit from StHbtEvtGenHiddenInfo , Or it is NULL " << endl;
00067 exit(0);
00068 }
00069 }
00070 if (mUseHidMom&&mUseHidPid) {
00071 mMomentum1=new StHbtLorentzVector(*(tEvtGenHidInf1->getFreezeOutMomEn()));
00072 mMomentum2=new StHbtLorentzVector(*(tEvtGenHidInf2->getFreezeOutMomEn()));
00073 }else{
00074 mMom1=aPair->track1()->FourMomentum();
00075 mMom1.setE(::sqrt(mMassSq1+mMom1.vect().mag2()));
00076 mMom2=aPair->track2()->FourMomentum();
00077 mMom2.setE(::sqrt(mMassSq2+mMom2.vect().mag2()));
00078 if ((!mUseHidMom)&&(mBetaRCMS>0)) {
00079 double tE=mMom1.e();
00080 mMom1.setE(mGammaRCMS*(tE-mBetaRCMS*mMom1.pz()));
00081 mMom1.setPz(mGammaRCMS*(mMom1.pz()-mBetaRCMS*tE));
00082 tE=mMom2.e();
00083 mMom2.setE(mGammaRCMS*(tE-mBetaRCMS*mMom2.pz()));
00084 mMom2.setPz(mGammaRCMS*(mMom2.pz()-mBetaRCMS*tE));
00085 }
00086 }
00087 if (mUseHidPid) {
00088 mPid1=tEvtGenHidInf1->getPid();
00089 mPid2=tEvtGenHidInf2->getPid();
00090 }
00091 }
00092
00093 void StHbtThPairGauss::SetPosition() {
00094 float x,y,z,t;
00095 mRand.Rannor(x,y);
00096 mRand.Rannor(z,t);
00097 mPos1.setX(x*mSizeX);
00098 mPos1.setY(y*mSizeY);
00099 mPos1.setZ(z*mSizeZ);
00100 mPos1.setT(t*mTime);
00101 mRand.Rannor(x,y);
00102 mRand.Rannor(z,t);
00103 mPos2.setX(x*mSizeX);
00104 mPos2.setY(y*mSizeY);
00105 mPos2.setZ(z*mSizeZ);
00106 mPos2.setT(t*mTime);
00107 };
00108
00109 void StHbtThPairGauss::BoostPosition(){
00110 double tBeta;
00111 double tGamma;
00112 double tT;
00113 switch (mRef) {
00114 case RCMS: break;
00115 case LCMS:
00116 tBeta=(mMomentum1->pz()+mMomentum2->pz())/(mMomentum1->e()+mMomentum2->e());
00117 tGamma=::sqrt(1/1-tBeta*tBeta);
00118 tT=mPos1.t();
00119 mPos1.setT(tGamma*(tT-tBeta*mPos1.z()));
00120 mPos1.setZ(tGamma*(tBeta*mPos1.z()-tBeta*tT));
00121 tT=mPos2.t();
00122 mPos2.setT(tGamma*(tT-tBeta*mPos2.z()));
00123 mPos2.setZ(tGamma*(mPos2.z()-tBeta*tT));
00124 break;
00125 case PRF:
00126 StHbtLorentzVector tBoost=*mMomentum1+*mMomentum2;
00127 mPos1=mPos1.boost(tBoost);
00128 mPos2=mPos2.boost(tBoost);
00129 break;
00130 }
00131 };
00132
00133 inline void StHbtThPairGauss::SetSize(double aSize,double aTime){mSizeX=aSize;mSizeY=aSize;mSizeZ=aSize;mTime=aTime;};
00134 inline void StHbtThPairGauss::SetSize(double aSizeX,double aSizeY, double aSizeZ,double aTime)
00135 {mSizeX=aSizeX;mSizeY=aSizeY;mSizeZ=aSizeZ;mTime=aTime;};
00136
00137 inline void StHbtThPairGauss::UseHiddenMomentum(){mUseHidMom=1;};
00138 inline void StHbtThPairGauss::UseParticleMomentum(){
00139 mUseHidMom=0;
00140 if (mUseHidPid){
00141 mMomentum1=&mMom1;
00142 mMomentum2=&mMom2;
00143 }
00144 };
00145
00146 inline void StHbtThPairGauss::UseHiddenPid() {
00147 mUseHidPid=true;
00148 if (mUseHidMom){
00149 mMomentum1=&mMom1;
00150 mMomentum2=&mMom2;
00151 }
00152 };
00153
00154 inline void StHbtThPairGauss::UseFixedPid( int const tPid1,double const tMass1,int const tPid2, double const tMass2) {
00155 mUseHidPid=false;mPid1=tPid1;mPid2=tPid2;mMassSq1=tMass1*tMass1;mMassSq2=tMass2*tMass2;};
00156 inline void StHbtThPairGauss::UseFixedPid( int const tPid1,double const tMass1) {
00157 mUseHidPid=false;mPid1=tPid1;mPid2=tPid1;mMassSq1=tMass1*tMass1;mMassSq2=tMass1*tMass1;};
00158
00159 inline void StHbtThPairGauss::SetRCMS() {mRef=RCMS;};
00160 inline void StHbtThPairGauss::SetLCMS(){mRef=LCMS;};
00161 inline void StHbtThPairGauss::SetPRF(){mRef=PRF;};
00162
00163 inline void StHbtThPairGauss::SetBoostRCMS(double aPlab,double aMBeam, double aMTarget){
00164 double tEBeamLab=::sqrt(aPlab*aPlab+aMBeam*aMBeam);
00165 mGammaRCMS=(tEBeamLab+aMTarget)/::sqrt(aMBeam*aMBeam+aMTarget*aMTarget+2*tEBeamLab*aMTarget);
00166 mBetaRCMS=::sqrt(1.-1/(mGammaRCMS*mGammaRCMS));
00167 }
00168