00001
00020 #ifndef StiTrack_H
00021 #define StiTrack_H 1
00022
00023
00024 #include <math.h>
00025 #include <vector>
00026 using namespace std;
00027
00028
00029 #include "StThreeVector.hh"
00030 #include "StThreeVectorF.hh"
00031
00032
00033 class StiHit;
00034 class StHit;
00035 class StMeasuredPoint;
00036 class StiTrackFinder;
00037 class StiTrackFitter;
00038 class StiTrack;
00039 class StiTrackNode;
00040
00047 enum StiDirection {kOutsideIn=0, kInsideOut};
00048
00057 class StiTrack
00058 {
00059 public:
00060
00061 enum StiTrackProperty {kCharge=0,
00062 kMass,
00063 kChi2,
00064 kDca2,
00065 kDca3,
00066 kFlag,
00067 kPrimaryDca,
00068 kPointCount,
00069 kFitPointCount,
00070 kGapCount,
00071 kTrackLength,
00072 kMaxPointCount,
00073 kisPrimary,
00074 kTpcDedx,
00075 kSvtDedx,
00076 kCurvature,
00077 kP,
00078 kPt,
00079 kRapidity,
00080 kPseudoRapidity,
00081 kPhi,
00082 kTanL };
00083 static void setTrackFinder(StiTrackFinder * finder);
00084 static void setTrackFitter(StiTrackFitter * fitter);
00085 static StiTrackFinder * getTrackFinder();
00086 static StiTrackFitter * getTrackFitter();
00087
00088 StiTrack();
00089 virtual ~StiTrack() { }
00090 virtual int fit (int direction=kOutsideIn);
00091 virtual bool find(int direction=kOutsideIn);
00092 virtual void reset()=0;
00093 virtual void unset(){;}
00094 virtual void reduce(){;}
00095 virtual void getMomentum(double p[3], double e[6]) const =0;
00096 virtual StThreeVector<double> getMomentumAtOrigin() const =0;
00097 virtual double getCurvature() const=0;
00098 virtual double getP() const=0;
00099 virtual double getPt() const=0;
00100 virtual double getRapidity() const=0;
00101 virtual double getPseudoRapidity() const=0;
00102 virtual double getPhi() const=0;
00103 virtual double getTanL() const=0;
00104 virtual double getDca(const StiHit*)const;
00105 virtual double getDca() const=0;
00106 virtual double getDca2(StiTrack *t) const=0;
00107 virtual double getDca3(StiTrack *t) const=0;
00108 virtual int getPointCount (int detectorId=0) const=0;
00109 virtual int getFitPointCount(int detectorId=0) const=0;
00110 virtual int getGapCount() const=0;
00111 virtual int getMaxPointCount(int detectorId=0) const=0;
00113 virtual UShort_t getSeedHitCount() const =0;
00114 virtual void setSeedHitCount(UShort_t c)=0;
00115 virtual double getTrackLength() const=0;
00116 virtual vector<const StMeasuredPoint*> stHits() const=0;
00118 virtual double getMass() const=0;
00120 virtual int getCharge() const=0;
00122 virtual double getChi2() const=0;
00123 virtual void setFlag(long v)=0;
00124 virtual long getFlag() const=0;
00125 virtual vector<StiHit*> getHits()=0;
00126
00127 virtual double getValue(int key) const;
00128 int getId() const {return mId;}
00129 void setId(int id) {mId=id;}
00130 virtual StiTrackNode *extendToVertex(StiHit* vertex)=0;
00131
00132 virtual int refit()=0;
00133 virtual int refitL()=0;
00134 StiTrack &operator=(const StiTrack &tk);
00135 protected:
00136 static StiTrackFinder * trackFinder;
00137 static StiTrackFitter * trackFitter;
00138
00139 friend ostream& operator<<(ostream& os, const StiTrack& track);
00140 protected:
00141 int mId;
00142 int mIdDb;
00143 };
00144
00145
00146 inline double StiTrack::getDca(const StiHit*)const
00147 {
00148 return 0;
00149 }
00150 #endif