00001 #include <Stiostream.h>
00002 #include <stdexcept>
00003 #include <stdlib.h>
00004
00005
00006 #include "Sti/StiHit.h"
00007 #include "Sti/StiTrack.h"
00008 #include "Sti/StiTrackFitter.h"
00009 #include "Sti/StiTrackFinder.h"
00010 #include "Sti/StiTrackFitter.h"
00011 #include "Sti/Base/Filter.h"
00012
00013 StiTrackFinder * StiTrack::trackFinder = 0;
00014 StiTrackFitter * StiTrack::trackFitter = 0;
00015
00016
00017 StiTrack::StiTrack()
00018 {
00019 mId = 0;
00020 }
00021
00022
00023 ostream& operator<<(ostream& os, const StiTrack& track)
00024 {
00025 try
00026 {
00027 os << "Id: " << track.getId()
00028 <<" Chi2: "<<track.getChi2()
00029 <<" q: "<<track.getCharge()
00030 <<" pt: "<<track.getPt()
00031 <<" eta: "<<track.getPseudoRapidity()
00032 <<" tanLambda: "<<track.getTanL()
00033 <<" phi: "<<track.getPhi()
00034 <<" points/fit/max: "<<track.getPointCount()
00035 <<"/"<<track.getFitPointCount()
00036 <<"/"<<track.getMaxPointCount()<<endl;
00037 }
00038 catch (runtime_error & rte)
00039 {
00040 os << " Run-time Error while accessing track parameters: " << rte.what() << endl;
00041 }
00042 catch (logic_error & le)
00043 {
00044 os << " Logic Error while accessing track parameters: " << le.what() << endl;
00045 }
00046 return os;
00047 }
00048
00049
00050 void StiTrack::setTrackFinder(StiTrackFinder * finder)
00051 {
00052 trackFinder = finder;
00053 }
00054
00055
00056 void StiTrack::setTrackFitter(StiTrackFitter * fitter)
00057 {
00058 trackFitter = fitter;
00059 }
00060
00061
00062 StiTrackFinder * StiTrack::getTrackFinder()
00063 {
00064 return trackFinder;
00065 }
00066
00067
00068 StiTrackFitter * StiTrack::getTrackFitter()
00069 {
00070 return trackFitter;
00071 }
00072
00073
00074
00075 int StiTrack::fit(int direction)
00076 {
00077 return trackFitter->fit(this,direction);
00078 }
00079
00080
00081 bool StiTrack::find(int direction)
00082 {
00083 return trackFinder->find(this,direction);
00084 }
00085
00086
00087
00088 double StiTrack::getValue(int key) const
00089 {
00090 double value;
00091 switch (key)
00092 {
00093 case kCharge: value = getCharge(); break;
00094 case kMass: value = getMass(); break;
00095 case kChi2: value = getChi2(); break;
00096 case kDca2: value = 0.;break;
00097 case kDca3: value = 0.;break;
00098 case kFlag: value = getFlag(); break;
00099 case kPointCount: value = getPointCount(); break;
00100 case kFitPointCount: value = getFitPointCount(); break;
00101 case kGapCount: value = getGapCount(); break;
00102 case kTrackLength: value = getTrackLength(); break;
00103 case kMaxPointCount: value = getMaxPointCount(); break;
00104 case kTpcDedx: value = 0; break;
00105 case kSvtDedx: value = 0; break;
00106 case kCurvature: value = getCurvature(); break;
00107 case kP: value = getP(); break;
00108 case kPt: value = getPt(); break;
00109 case kRapidity: value = getRapidity(); break;
00110 case kPseudoRapidity: value = getPseudoRapidity(); break;
00111 case kPhi: value = getPhi(); break;
00112 case kTanL: value = getTanL(); break;
00113 default: value = -999999.; break;
00114 }
00115 return value;
00116 }
00117
00118 StiTrack &StiTrack::operator=(const StiTrack &tk)
00119 {
00120 mId = tk.mId;
00121 return *this;
00122 }
00123
00124