00001 #ifndef TRACK_CC
00002 #define TRACK_CC
00003
00004 #include "track.hh"
00005
00006 namespace larlight {
00007
00008
00009 track::track(DATA::DATA_TYPE type) : data_base(type),
00010 fXYZ(),
00011 fDir(),
00012 fCov(),
00013 fdQdx(),
00014 fFitMomentum()
00015
00016 {
00017 if( _type != DATA::Track &&
00018 _type != DATA::Bezier &&
00019 _type != DATA::Kalman3DSPS &&
00020 _type != DATA::Kalman3DHit ) {
00021
00022 Message::send(MSG::ERROR,__FUNCTION__,
00023 Form("Provided data type (%s) not supported! Reset to default.",DATA::DATA_TREE_NAME[_type].c_str()));
00024 _type = DATA::Track;
00025
00026 }
00027
00028 clear_data();
00029 }
00030
00031
00032
00033 track::track(const track& original) : data_base(original),
00034 fID(original.fID),
00035 fXYZ(original.fXYZ),
00036 fDir(original.fDir),
00037 fCov(original.fCov),
00038 fdQdx(original.fdQdx),
00039 fFitMomentum(original.fFitMomentum)
00040
00041 {}
00042
00043
00044 void track::clear_data()
00045
00046 {
00047 data_base::clear_data();
00048 fID = -1;
00049 fXYZ.clear();
00050 fDir.clear();
00051 fCov.clear();
00052 fdQdx.clear();
00053 fFitMomentum.clear();
00054 }
00055
00056
00057 void track::get_axis_range(Double_t &max, Double_t &min, const Int_t axis) const
00058
00059 {
00060
00061 if(axis < 0 || axis>2) {
00062
00063 Message::get()->send(MSG::ERROR,__FUNCTION__,Form("Invalid axis index: %d",axis));
00064
00065 return;
00066
00067 }
00068
00069 for(size_t i=0; i<fXYZ.size(); ++i) {
00070
00071 if(fXYZ[i][axis] > max) max = fXYZ[i][axis];
00072
00073 if(fXYZ[i][axis] < min) min = fXYZ[i][axis];
00074
00075 }
00076
00077 return;
00078 }
00079
00080
00081 void track::get_axis_range(Double_t &xmax, Double_t &xmin,
00082 Double_t &ymax, Double_t &ymin,
00083 Double_t &zmax, Double_t &zmin) const
00084
00085 {
00086
00087 for(size_t i=0; i<fXYZ.size(); ++i) {
00088
00089 if(fXYZ[i][0] > xmax) xmax = fXYZ[i][0];
00090 if(fXYZ[i][0] < xmin) xmin = fXYZ[i][0];
00091 if(fXYZ[i][1] > ymax) ymax = fXYZ[i][1];
00092 if(fXYZ[i][1] < ymin) ymin = fXYZ[i][1];
00093 if(fXYZ[i][2] > zmax) zmax = fXYZ[i][2];
00094 if(fXYZ[i][2] < zmin) zmin = fXYZ[i][2];
00095
00096 }
00097
00098 return;
00099 }
00100
00101 event_track::event_track(DATA::DATA_TYPE type) : std::vector<larlight::track>(),
00102 event_base(type)
00103 {
00104 if( _type != DATA::Track &&
00105 _type != DATA::Bezier &&
00106 _type != DATA::Kalman3DSPS &&
00107 _type != DATA::Kalman3DHit ) {
00108
00109 Message::send(MSG::ERROR,__FUNCTION__,
00110 Form("Provided data type (%s) not supported! Reset to default.",DATA::DATA_TREE_NAME[_type].c_str()));
00111
00112 _type = DATA::Track;
00113
00114 }
00115
00116 clear_data();
00117 }
00118
00119
00120 void event_track::get_axis_range(Double_t &max, Double_t &min, const Int_t axis) const
00121
00122 {
00123
00124 if(axis < 0 || axis>2) {
00125
00126 Message::get()->send(MSG::ERROR,__FUNCTION__,Form("Invalid axis index: %d",axis));
00127
00128 return;
00129
00130 }
00131
00132 for(size_t i=0; i<this->size(); ++i)
00133
00134 this->at(i).get_axis_range(max,min,axis);
00135
00136 return;
00137 }
00138
00139
00140 void event_track::get_axis_range(Double_t &xmax, Double_t &xmin,
00141 Double_t &ymax, Double_t &ymin,
00142 Double_t &zmax, Double_t &zmin) const
00143
00144 {
00145
00146 for(size_t i=0; i<this->size(); ++i)
00147
00148 this->at(i).get_axis_range(xmax,xmin,ymax,ymin,zmax,zmin);
00149
00150 return;
00151 }
00152
00153 }
00154 #endif