00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef TTrackMC_FLAG_
00014 #define TTrackMC_FLAG_
00015
00016 #define TTrackClassified 1
00017
00018 #define TTrackGarbage 1
00019 #define TTrackCharge 2
00020 #define TTrackBad 4
00021 #define TTrackGhost 8
00022 #define TTrackGood 16
00023
00024 #define TTrackHep 65536
00025 #define TTrackWire 131072
00026 #define TTrackPt 524288
00027 #define TTrackPz 1048576
00028 #define TTrackUnique 2097152
00029 #define TTrackMatchingLoose 4194304
00030 #define TTrackMatchingTight 8388608
00031
00032 #ifdef TRKRECO_DEBUG_DETAIL
00033 #ifndef TRKRECO_DEBUG
00034 #define TRKRECO_DEBUG
00035 #endif
00036 #endif
00037
00038 #include <string>
00039
00040 #define HEP_SHORT_NAMES
00041 #include "CLHEP/Alist/AList.h"
00042 #include "CLHEP/Vector/ThreeVector.h"
00043 #include "CLHEP/Vector/LorentzVector.h"
00044
00045 class MdcRec_mctrk;
00046 class TrkReco;
00047 class TTrack;
00048 class TTrackHEP;
00049
00050 using CLHEP::Hep3Vector;
00051 using CLHEP::HepLorentzVector;
00052
00054 class TTrackMC {
00055
00056 private:
00058 TTrackMC(const TTrack &);
00059
00060 public:
00062 virtual ~TTrackMC();
00063
00064 public:
00066 void dump(const std::string & message = std::string(""),
00067 const std::string & prefix = std::string("")) const;
00068
00070 int hepId(void) const;
00071
00073 const TTrackHEP * const hep(void) const;
00074
00076 bool charge(void) const;
00077
00079 double wireFraction(void) const;
00080
00082 double wireFractionHEP(void) const;
00083
00085 double ptFraction(void) const;
00086
00088 double pzFraction(void) const;
00089
00091 const Hep3Vector & residual(void) const;
00092
00094 double ptResidual(void) const;
00095
00097 double pzResidual(void) const;
00098
00100 double ptPull(void) const;
00101
00103 double pzPull(void) const;
00104
00106 unsigned state(void) const;
00107
00109 unsigned quality(void) const;
00110
00112 std::string qualityString(void) const;
00113
00114 public:
00116 void update(void);
00117
00118 private:
00120 void compare(void);
00121
00123 void classify(void);
00124
00125 private:
00126 unsigned _state;
00127 unsigned _quality;
00128
00129 const TTrack & _t;
00130 TTrackHEP * _hep;
00131 int _hepID;
00132 double _wireFraction;
00133 double _wireFractionHEP;
00134 bool _charge;
00135 double _ptFraction;
00136 double _pzFraction;
00137 Hep3Vector _residual;
00138 double _cosOpen;
00139 double _ptResidual;
00140 double _pzResidual;
00141 double _ptPull;
00142 double _pzPull;
00143
00144 friend class TrkReco;
00145 };
00146
00147 std::string
00148 TrackMCStatus(const TTrackMC &);
00149
00150 std::string
00151 TrackMCStatus(const MdcRec_mctrk &);
00152
00153 std::string
00154 TrackMCQualityString(unsigned quality);
00155
00156
00157
00158 #ifdef TRKRECO_NO_INLINE
00159 #define inline
00160 #else
00161 #undef inline
00162 #define TTrackMC_INLINE_DEFINE_HERE
00163 #endif
00164
00165 #ifdef TTrackMC_INLINE_DEFINE_HERE
00166
00167 inline
00168 int
00169 TTrackMC::hepId(void) const {
00170 return _hepID;
00171 }
00172
00173 inline
00174 const TTrackHEP * const
00175 TTrackMC::hep(void) const {
00176 return _hep;
00177 }
00178
00179 inline
00180 bool
00181 TTrackMC::charge(void) const {
00182 return _charge;
00183 }
00184
00185 inline
00186 double
00187 TTrackMC::ptFraction(void) const {
00188 return _ptFraction;
00189 }
00190
00191 inline
00192 double
00193 TTrackMC::pzFraction(void) const {
00194 return _pzFraction;
00195 }
00196
00197 inline
00198 double
00199 TTrackMC::wireFraction(void) const {
00200 return _wireFraction;
00201 }
00202
00203 inline
00204 double
00205 TTrackMC::wireFractionHEP(void) const {
00206 return _wireFractionHEP;
00207 }
00208
00209 inline
00210 unsigned
00211 TTrackMC::state(void) const {
00212 return _state;
00213 }
00214
00215 inline
00216 unsigned
00217 TTrackMC::quality(void) const {
00218 return _quality;
00219 }
00220
00221 inline
00222 const Hep3Vector &
00223 TTrackMC::residual(void) const {
00224 return _residual;
00225 }
00226
00227 inline
00228 double
00229 TTrackMC::ptResidual(void) const {
00230 return _ptResidual;
00231 }
00232
00233 inline
00234 double
00235 TTrackMC::pzResidual(void) const {
00236 return _pzResidual;
00237 }
00238
00239 inline
00240 double
00241 TTrackMC::ptPull(void) const {
00242 return _ptPull;
00243 }
00244
00245 inline
00246 double
00247 TTrackMC::pzPull(void) const {
00248 return _pzPull;
00249 }
00250
00251 #endif
00252
00253 #undef inline
00254
00255 #endif