00001
00002
00003
00004
00005
00006
00007
00008 #include "StL3RareTrack.h"
00009 #include "Rtypes.h"
00010 #include "StEventTypes.h"
00011
00012 double dEdx_formula(double momentum, double mass);
00013
00014 ClassImp(StL3RareTrack)
00015
00016 StL3RareTrack::StL3RareTrack()
00017 {
00018 mDca2d = 0;
00019 mNPntpossible = 0;
00020 mTracknumber = 0;
00021 mFlag = 0;
00022 mNPntfit = 0;
00023 mChisqXY = 0;
00024 mChisqSZ = 0;
00025 mPx = 0;
00026 mPy = 0;
00027 mPz = 0;
00028 mChargesign = 0;
00029 mTrigType = 0;
00030 mDedx = 0.0;
00031 }
00032
00033
00034 StL3RareTrack::StL3RareTrack(StGlobalTrack* track)
00035 {
00036 mDca2d = track->impactParameter();
00037 mNPntpossible = track->numberOfPossiblePoints();
00038 mTracknumber = track->key();
00039 mFlag = track->flag();
00040 mNPntfit = track->detectorInfo()->numberOfPoints();
00041 mChisqXY = track->fitTraits().chi2(0)/mNPntfit;
00042 mChisqSZ = track->fitTraits().chi2(1)/mNPntfit;
00043 mPx = track->geometry()->momentum().x();
00044 mPy = track->geometry()->momentum().y();
00045 mPz = track->geometry()->momentum().z();
00046 mChargesign = track->geometry()->charge();
00047 mTrigType = 0;
00048 mDedx = 0.0;
00049 mNDedx = 0;
00050 StSPtrVecTrackPidTraits& traits = track->pidTraits();
00051 StDedxPidTraits* dedxPidTr;
00052 for (unsigned int itrait = 0; itrait < traits.size(); itrait++){
00053 dedxPidTr = 0;
00054 if (traits[itrait]->detector() == kTpcId) {
00055 StTrackPidTraits* thisTrait = traits[itrait];
00056 dedxPidTr = dynamic_cast<StDedxPidTraits*>(thisTrait);
00057 if (dedxPidTr && dedxPidTr->method() == kTruncatedMeanId) {
00058
00059 mDedx = 2 * dedxPidTr->mean();
00060 mNDedx = dedxPidTr->numberOfPoints();
00061 }
00062 }
00063 }
00064
00065 }
00066
00067
00068 float StL3RareTrack::dedxExpected(float mass, float charge) const {
00069 float real_mom = p()*charge;
00070 float dedx = charge*charge*dEdx_formula(real_mom,mass);
00071 return dedx;
00072 }
00073
00074 void StL3RareTrack::SetTrigType(int type) {mTrigType = type;}