00001
00002
00003
00004
00005 #include "StHbtMaker/ThCorrFctn/StHbtSmearedHiddenInfo.h"
00006 #include "TMath.h"
00007 #define DEGTORAD 0.017453293
00008
00009 StHbtSmearedHiddenInfo::StHbtSmearedHiddenInfo()
00010 {};
00011
00012 StHbtSmearedHiddenInfo::StHbtSmearedHiddenInfo(const StHbtLorentzVector& aInitialMom,
00013 const StHbtLorentzVector& aFreezeOut,
00014 const int& aPid,
00015 TRandom* aRand,
00016 const StHbtMomRes* aMomRes)
00017 :
00018 mPid(aPid)
00019 {
00020 setInitialMom(&aInitialMom, aRand, aMomRes);
00021 setFreezeOut(&aFreezeOut);
00022 }
00023
00024 StHbtSmearedHiddenInfo::StHbtSmearedHiddenInfo(const StHbtSmearedHiddenInfo& aHiddenInfo)
00025 :
00026 mSmearedMom(aHiddenInfo.getSmearedMom()),
00027 mPid(aHiddenInfo.getPid())
00028 {
00029 mFreezeOut = new StHbtLorentzVector(aHiddenInfo.getFreezeOut());
00030 };
00031
00032 StHbtSmearedHiddenInfo::StHbtSmearedHiddenInfo(const StHbtLorentzVector& aSmearedMom,
00033 const StHbtLorentzVector& aFreezeOut,
00034 const int& aPid):
00035 mSmearedMom(aSmearedMom),
00036 mPid(aPid)
00037 {
00038 mFreezeOut = new StHbtLorentzVector(aFreezeOut);
00039 };
00040
00041 StHbtSmearedHiddenInfo::~StHbtSmearedHiddenInfo()
00042 {
00043 if (mFreezeOut) delete mFreezeOut;
00044 };
00045
00046 inline const StHbtLorentzVector& StHbtSmearedHiddenInfo::getSmearedMom() const {
00047 return mSmearedMom;
00048 }
00049
00050 inline StHbtLorentzVector& StHbtSmearedHiddenInfo::getFreezeOut() const
00051 {
00052 return *mFreezeOut;
00053 }
00054
00055 inline int StHbtSmearedHiddenInfo::getPid() const
00056 {return mPid;}
00057
00058 inline void StHbtSmearedHiddenInfo::setInitialMom(const StHbtLorentzVector* aP, TRandom* aRand, const StHbtMomRes* aMomRes) {
00059
00060
00061
00062
00063
00064 Float_t px = aP->x();
00065 Float_t py = aP->y();
00066 Float_t pz = aP->z();
00067
00068
00069 Float_t totmom = sqrt ((px * px) + (py * py) + (pz * pz));
00070 Float_t per = aMomRes->getPtError(totmom);
00071 Float_t thetaan = TMath::ATan2(hypot(px,py),pz);
00072 Float_t phier = aMomRes->getPhiError(totmom);
00073 Float_t thetaer = aMomRes->getThetaError(totmom);
00074 Float_t pshift = aMomRes->getPShift(totmom);
00075
00076
00077
00078
00079 Float_t rescale = (totmom - pshift) / totmom;
00080
00081
00082
00083
00084
00085
00086
00087 Float_t Deltapx = TMath::Abs(px) * per + TMath::Abs(py) * phier + TMath::Abs(px * (1/TMath::Tan(thetaan))) * thetaer;
00088 Float_t Deltapy = TMath::Abs(py) * per + TMath::Abs(px) * phier + TMath::Abs(py * (1/TMath::Tan(thetaan))) * thetaer;
00089 Float_t Deltapz = TMath::Abs(pz) * per + TMath::Abs(pz * TMath::Tan(thetaan)) * thetaer;
00090
00091
00092
00093 mSmearedMom.setX((px + aRand->Gaus(0,fabs(Deltapx))) * rescale);
00094 mSmearedMom.setY((py + aRand->Gaus(0,fabs(Deltapy))) * rescale);
00095 mSmearedMom.setZ((pz + aRand->Gaus(0,fabs(Deltapz))) * rescale);
00096
00097
00098 switch (abs(mPid)) {
00099 case 211:
00100 mSmearedMom.setT(::sqrt((0.139*0.139 + mSmearedMom.x() * mSmearedMom.x() + mSmearedMom.y() * mSmearedMom.y() + mSmearedMom.z() * mSmearedMom.z())));
00101 break;
00102 case 321:
00103 mSmearedMom.setT(::sqrt((0.493*0.493 + mSmearedMom.x() * mSmearedMom.x() + mSmearedMom.y() * mSmearedMom.y() + mSmearedMom.z() * mSmearedMom.z())));
00104 break;
00105 case 2212:
00106 mSmearedMom.setT(::sqrt((0.938*0.938 + mSmearedMom.x() * mSmearedMom.x() + mSmearedMom.y() * mSmearedMom.y() + mSmearedMom.z() * mSmearedMom.z())));
00107 break;
00108
00109 }
00110 }
00111
00112 inline void StHbtSmearedHiddenInfo:: setPid(int aPid)
00113 { mPid=aPid; }
00114
00115 inline void StHbtSmearedHiddenInfo:: setFreezeOut(const StHbtLorentzVector* aFreezeOut)
00116 { mFreezeOut = new StHbtLorentzVector(*aFreezeOut); }
00117
00118 inline StHbtHiddenInfo* StHbtSmearedHiddenInfo::getParticleHiddenInfo()
00119 const
00120 {return new StHbtSmearedHiddenInfo(mSmearedMom, *mFreezeOut, mPid);}
00121
00122 inline StHbtLorentzVector& StHbtSmearedHiddenInfo::getMomentum()
00123 {
00124 return mSmearedMom;
00125 }
00126