00001 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00002 #include "StGammaTrack.h"
00003
00004 ClassImp(StGammaTrack);
00005
00007
00009 StGammaTrack::StGammaTrack()
00010 {
00011 id = 0;
00012 flag = -1;
00013 charge = 0;
00014 nhits = 0;
00015 dEdx = 0;
00016 }
00017
00019
00021 StGammaTrack::StGammaTrack(StMuTrack* track)
00022 {
00023
00024 id = track->id();
00025 flag = track->flag();
00026 charge = track->charge();
00027 nhits = track->nHitsFit();
00028 dEdx = track->dEdx() / keV;
00029 type = track->type();
00030 momentum = track->momentum().xyz();
00031 dca = track->dcaGlobal().xyz();
00032 helix = track->helix();
00033 outerHelix = track->outerHelix();
00034
00035 }
00036
00038
00040 StGammaTrack::~StGammaTrack()
00041 {}
00042
00043
00045
00046
00048 TVector3 StGammaTrack::positionAtRadius(Double_t radius) const
00049 {
00050
00051 static const pair<double, double> VALUE(999999999., 999999999.);
00052
00053 if(outerHelix.origin().perp() < radius)
00054 {
00055
00056 pair<double, double> ss = outerHelix.pathLength(radius);
00057
00058 if(finite(ss.first) && finite(ss.second) && ss != VALUE)
00059 {
00060
00061 double s = 0;
00062
00063 if(ss.first > 0 && ss.second > 0 || ss.first >= 0 && ss.second < 0)
00064 {
00065 s = ss.first;
00066 }
00067 else if(ss.first < 0 && ss.second >= 0)
00068 {
00069 s = ss.second;
00070 }
00071
00072 if(s > 0) return outerHelix.at(s).xyz();
00073
00074 }
00075 }
00076
00077 return TVector3(0,0,0);
00078
00079 }
00080
00081
00083
00085 TVector3 StGammaTrack::positionAtZ(Double_t z) const
00086 {
00087
00088 if( fabs(outerHelix.origin().z()) < fabs(z) )
00089 {
00090
00091 StThreeVector<double> r(0, 0, z);
00092 StThreeVector<double> n(0, 0, 1);
00093
00094 double s = outerHelix.pathLength(r, n);
00095
00096 if (finite(s) && s != StHelix::NoSolution && s > 0)
00097 {
00098 return outerHelix.at(s).xyz();
00099 }
00100
00101 }
00102
00103 return TVector3(0, 0, 0);
00104
00105 }