00001
00015 #ifndef TRACK_HH
00016 #define TRACK_HH
00017
00018 #include "data_base.hh"
00019 #include "TVector3.h"
00020 #include "TMatrixD.h"
00021
00022 namespace larlight {
00027 class track : public data_base {
00028
00029 public:
00030
00032 track(DATA::DATA_TYPE type=DATA::Track);
00033
00035 track(const track& original);
00036
00038 virtual ~track(){}
00039
00040 inline Int_t track_id () const { return fID; }
00041 inline size_t n_point () const { return fDir.size(); }
00042 inline size_t n_covariance () const { return fCov.size(); }
00043 inline size_t n_momentum () const { return fFitMomentum.size(); }
00044 inline size_t n_dQdx () const { return fdQdx.size(); }
00045
00046 inline const TVector3& direction_at (UInt_t p) const { return fDir.at(p); }
00047 inline const TVector3& vertex_at (UInt_t p) const { return fXYZ.at(p); }
00048 inline Double_t momentum_at (UInt_t p) const { return fFitMomentum.at(p); }
00049 inline const TMatrixD& covariance_at (UInt_t p) const { return fCov.at(p); }
00050
00051 inline void set_track_id (const Int_t id) { fID = id; }
00052 inline void add_vertex (const TVector3 v) { fXYZ.push_back(v); }
00053 inline void add_direction (const TVector3 v) { fDir.push_back(v); }
00054 inline void add_momentum (const Double_t v) { fFitMomentum.push_back(v); }
00055 inline void add_covariance (const TMatrixD m) { fCov.push_back(m); }
00056
00057 virtual void clear_data();
00058
00064 void get_axis_range (Double_t &max, Double_t &min, const Int_t axis) const;
00065
00071 void get_axis_range (Double_t &xmax, Double_t &xmin,
00072 Double_t &ymax, Double_t &ymin,
00073 Double_t &zmax, Double_t &zmin) const;
00074
00075
00076 protected:
00077
00079 Int_t fID;
00080
00082 std::vector<TVector3> fXYZ;
00083
00085 std::vector<TVector3> fDir;
00086
00091 std::vector<TMatrixD> fCov;
00092
00097 std::vector< std::vector <Double_t> > fdQdx;
00098
00104 std::vector<Double_t> fFitMomentum;
00105
00106 private:
00107
00108
00110 ClassDef(track,2)
00112
00113 };
00114
00119 class event_track : public std::vector<larlight::track>, public event_base {
00120
00121 public:
00122
00124 event_track(DATA::DATA_TYPE type=DATA::Track);
00125
00127 event_track(const event_track& original) : std::vector<larlight::track>(original),
00128 event_base(original)
00129 {}
00130
00132 ~event_track(){}
00133
00135 virtual void clear_data(){event_base::clear_data(); clear();}
00136
00142 void get_axis_range (Double_t &max, Double_t &min, const Int_t axis) const;
00143
00149 void get_axis_range (Double_t &xmax, Double_t &xmin,
00150 Double_t &ymax, Double_t &ymin,
00151 Double_t &zmax, Double_t &zmin) const;
00152
00153 private:
00154
00156 ClassDef(event_track,3)
00158 };
00159 }
00160 #endif
00161