00001
00002
00003
00004
00005 #include "StHbtMaker/ThCorrFctn/StHbtShiftedHiddenInfo.h"
00006
00007 #define DEGTORAD 0.017453293
00008
00009 StHbtShiftedHiddenInfo::StHbtShiftedHiddenInfo() {};
00010 StHbtShiftedHiddenInfo::StHbtShiftedHiddenInfo(const StHbtLorentzVector& aInitialMom,
00011 const int& aPid,
00012 TRandom* aRand,
00013 const StHbtMomRes* aMomRes,
00014 const double momShift,
00015 const ShiftType aShiftType)
00016 :
00017 mPid(aPid), mMomShift(momShift), mShiftType(aShiftType)
00018 {
00019 setInitialMom(&aInitialMom, aRand, aMomRes);
00020 }
00021
00022 StHbtShiftedHiddenInfo::StHbtShiftedHiddenInfo(const StHbtShiftedHiddenInfo& aHiddenInfo)
00023 :
00024 mShiftedMom(aHiddenInfo.getShiftedMom()),
00025 mPid(aHiddenInfo.getPid())
00026 { };
00027
00028 StHbtShiftedHiddenInfo::StHbtShiftedHiddenInfo(const StHbtLorentzVector& aShiftedMom,
00029 const int& aPid):
00030 mShiftedMom(aShiftedMom),
00031 mPid(aPid)
00032 { };
00033
00034 StHbtShiftedHiddenInfo::~StHbtShiftedHiddenInfo()
00035 {};
00036
00037
00038 inline const StHbtLorentzVector StHbtShiftedHiddenInfo::getShiftedMom() const {
00039 return mShiftedMom;
00040 }
00041
00042 inline int StHbtShiftedHiddenInfo::getPid() const
00043 {return mPid;}
00044
00045 inline void StHbtShiftedHiddenInfo::setInitialMom(const StHbtLorentzVector* aP, TRandom* aRand, const StHbtMomRes* aMomRes) {
00046 Double_t px = aP->x();
00047 Double_t py = aP->y();
00048 Double_t pz = aP->z();
00049 Double_t shift;
00050
00051
00052 switch (mShiftType) {
00053 case PSHIFT:
00054 shift = (mPid > 0) ? 1.0 + mMomShift : shift = 1.0 - mMomShift;
00055 px *= shift;
00056 py *= shift;
00057 pz *= shift;
00058 break;
00059 case PTSHIFT:
00060 shift = (mPid > 0) ? 1.0 + mMomShift : shift = 1.0 - mMomShift;
00061 px *= shift;
00062 py *= shift;
00063 break;
00064 case PHISHIFT:
00065 Double_t thephi = atan(py/px);
00066 Double_t pt = hypot(px, py);
00067
00068 if (px < 0)
00069 thephi += 3.14159;
00070
00071
00072 if (abs(mPid) == 321)
00073 thephi += mMomShift;
00074 px = pt * cos(thephi);
00075 py = pt * sin(thephi);
00076 break;
00077 }
00078
00079 Double_t ptmom = hypot(px, py);
00080 Double_t pter = aMomRes->getPtError(ptmom);
00081 Double_t totmom = sqrt ((px * px) + (py * py) + (pz * pz));
00082 Double_t phier = aMomRes->getPhiError(totmom);
00083 Double_t thetaer = aMomRes->getThetaError(totmom);
00084 Double_t Deltapx = px * pter - py * phier * DEGTORAD;
00085 Double_t Deltapy = py * pter + px * phier * DEGTORAD;
00086 Double_t Deltapz = pz * pter + ptmom * thetaer * DEGTORAD / (::pow((ptmom/pz),2));
00087 mShiftedMom.setX(px + aRand->Gaus(0,fabs(Deltapx)));
00088 mShiftedMom.setY(py + aRand->Gaus(0,fabs(Deltapy)));
00089 mShiftedMom.setZ(pz + aRand->Gaus(0,fabs(Deltapz)));
00090 switch (abs(mPid)) {
00091 case 211:
00092 mShiftedMom.setT(::sqrt((0.139*0.139 + mShiftedMom.x() * mShiftedMom.x() + mShiftedMom.y() * mShiftedMom.y() + mShiftedMom.z() * mShiftedMom.z())));
00093 break;
00094 case 321:
00095 mShiftedMom.setT(::sqrt((0.493*0.493 + mShiftedMom.x() * mShiftedMom.x() + mShiftedMom.y() * mShiftedMom.y() + mShiftedMom.z() * mShiftedMom.z())));
00096 break;
00097 case 2212:
00098 mShiftedMom.setT(::sqrt((0.938*0.938 + mShiftedMom.x() * mShiftedMom.x() + mShiftedMom.y() * mShiftedMom.y() + mShiftedMom.z() * mShiftedMom.z())));
00099 break;
00100
00101 }
00102 }
00103
00104 inline void StHbtShiftedHiddenInfo:: setPid(int aPid)
00105 { mPid=aPid;}
00106
00107 inline void StHbtShiftedHiddenInfo::setShiftType(ShiftType aShiftType)
00108 { mShiftType = aShiftType; }
00109
00110 inline StHbtHiddenInfo* StHbtShiftedHiddenInfo::getParticleHiddenInfo()
00111 const
00112 {return new StHbtShiftedHiddenInfo(mShiftedMom, mPid);}
00113
00114 inline StHbtLorentzVector StHbtShiftedHiddenInfo::getMomentum() const
00115 {
00116 return mShiftedMom;
00117 }
00118
00119 inline void StHbtShiftedHiddenInfo::setShift(double momShift)
00120 {
00121 mMomShift = momShift;
00122 }
00123