00001 #include "StRareTrack.h"
00002 #include "StEventTypes.h"
00003 #include "StMessMgr.h"
00004 double dEdx_formula(double momentum, double mass);
00005 ClassImp(StRareTrack)
00006
00007 StRareTrack::StRareTrack(){}
00008
00009 StRareTrack::StRareTrack(StPrimaryTrack* track){
00010 StGlobalTrack* gtrack = static_cast<StGlobalTrack*>((StTrack*)track);
00011 fdca = gtrack->impactParameter();
00012 fnpntpossible = track->numberOfPossiblePoints();
00013 ftracknumber = track->key();
00014 fiflag = track->flag();
00015 fchisqxy = track->fitTraits().chi2(0);
00016 fchisqz = track->fitTraits().chi2(1);
00017 fnpntfit = track->fitTraits().numberOfFitPoints();
00018 fpx = track->geometry()->momentum().x();
00019 fpy = track->geometry()->momentum().y();
00020 fpz = track->geometry()->momentum().z();
00021 fchargesign = track->geometry()->charge();
00022 ftrigtype = 0;
00023 fdedx = 0.0;
00024 fndedx = 0;
00025 StSPtrVecTrackPidTraits& traits=track->pidTraits();
00026 StDedxPidTraits* dedxPidTr;
00027 for (unsigned int itrait = 0; itrait < traits.size(); itrait++){
00028 dedxPidTr = 0;
00029 if (traits[itrait]->detector() == kTpcId) {
00030 StTrackPidTraits* thisTrait = traits[itrait];
00031 dedxPidTr = dynamic_cast<StDedxPidTraits*>(thisTrait);
00032 if (dedxPidTr && dedxPidTr->method() == kTruncatedMeanId) {
00033 fdedx = 1e6*dedxPidTr->mean();
00034 fndedx = dedxPidTr->numberOfPoints();
00035 }
00036 }
00037 }
00038
00039 }
00040
00041 float StRareTrack::dedxExpected(float mass, float charge) const {
00042 float real_mom = p()*charge;
00043 float dedx = charge*charge*dEdx_formula(real_mom,mass);
00044 return dedx;
00045 }
00046
00047 void StRareTrack::SetTrigType(int type) {ftrigtype = type;}