00001
00007 #ifndef Track_hh
00008 #define Track_hh
00009
00013 #include <vector>
00014
00018 #include "TLinearFitter.h"
00019
00023 #include "StHit.h"
00024
00032 class Track : public vector<StHit*> {
00033 private:
00040 struct LessHit {
00041 bool operator()(const StHit* hit1, const StHit* hit2) const
00042 {
00043 return hit1->position().z() < hit2->position().z();
00044 }
00045 };
00046
00047 public:
00051 StHit* firstHit() const;
00052
00056 StHit* lastHit() const;
00057
00061 void merge(Track* track);
00062
00067 bool fit();
00068
00072 double chi2zx();
00073
00077 double chi2zy();
00078
00082 int ndf() const;
00083
00089 bool ok() const;
00090
00097 bool accept(StHit* hit) const;
00098
00104 double length() const;
00105
00109 double x0() const;
00110
00114 double y0() const;
00115
00119 double dxdz() const;
00120
00124 double dydz() const;
00125
00129 double x0error() const;
00130
00134 double y0error() const;
00135
00139 double dxdzError() const;
00140
00144 double dydzError() const;
00145
00146 private:
00147 static TLinearFitter mXfitter;
00148 static TLinearFitter mYfitter;
00149
00150 double mLength;
00151 double mChiSquareX;
00152 double mChiSquareY;
00153 int mNumberFreeParameters;
00154 double mX0;
00155 double mY0;
00156 double mdxdz;
00157 double mdydz;
00158 double mX0error;
00159 double mY0error;
00160 double mdxdzError;
00161 double mdydzError;
00162 };
00163
00164 inline StHit* Track::firstHit() const { return front(); }
00165 inline StHit* Track::lastHit() const { return back(); }
00166 inline double Track::length() const { return mLength; }
00167 inline double Track::chi2zx() { return mChiSquareX; }
00168 inline double Track::chi2zy() { return mChiSquareY; }
00169 inline int Track::ndf() const { return mNumberFreeParameters; }
00170 inline double Track::x0() const { return mX0; }
00171 inline double Track::y0() const { return mY0; }
00172 inline double Track::dxdz() const { return mdxdz; }
00173 inline double Track::dydz() const { return mdydz; }
00174 inline double Track::x0error() const { return mX0error; }
00175 inline double Track::y0error() const { return mY0error; }
00176 inline double Track::dxdzError() const { return mdxdzError; }
00177 inline double Track::dydzError() const { return mdydzError; }
00178
00179 ostream& operator<<(ostream&, const Track&);
00180
00181 #endif