00001 #ifndef TMB_TREE_TMBTRACK_HPP__
00002 #define TMB_TREE_TMBTRACK_HPP__
00003
00004 #include "tmb_tree/TMBLorentzVector.hpp"
00005
00006 #ifndef ROOT_TRef
00007 #include "TRef.h"
00008 #endif
00009
00010 #ifndef ROOT_TRefArray
00011 #include "TRefArray.h"
00012 #endif
00013
00014 class TMBIsoTrack;
00015 class TMBVertex;
00016
00021 class TMBTrack : public TMBLorentzVector {
00022
00023 private:
00024
00025
00026
00027 Int_t _q;
00028 Double32_t _chi2_ndof;
00029 Double32_t _smtdedx;
00030 Double32_t _smtededx;
00031 UInt_t _hitmask[4];
00032 TRef _isotref;
00033
00034
00035
00036
00037
00038
00039 Double32_t _bz;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 Double32_t _rdca;
00053 Double32_t _z;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 Double32_t _trerrs[15];
00065
00066
00067
00068
00069
00070
00071
00072
00073 Double32_t _xdca;
00074 Double32_t _ydca;
00075
00076
00077
00078
00079
00080 Double32_t _x_ps;
00081 Double32_t _y_ps;
00082 Double32_t _z_ps;
00083 Double32_t _px_ps;
00084 Double32_t _py_ps;
00085 Double32_t _pz_ps;
00086
00087
00088
00089 mutable TMBVector3 _last_p;
00090
00091 mutable bool _trpars_valid;
00092 mutable Double_t _trpars[5];
00093 mutable bool _trpos_valid;
00094 mutable Double_t _trpos[3];
00095
00096 public:
00097
00098
00099
00100 TMBTrack();
00101 TMBTrack(const Double_t* trpars, const Double_t* trerrs,
00102 Double_t bz,
00103 const UInt_t* hitmask, Double_t chi2_ndof,
00104 Double_t smtdedx, Double_t smt_ededx,
00105 const Double_t* ps_position, const Double_t* ps_momentum,
00106 const Double_t* surfpars,
00107 const TRef& isotref=TRef());
00108
00109 virtual ~TMBTrack();
00110 virtual void Clear(Option_t* opt);
00111
00112
00113
00114 Int_t charge() const {return _q;}
00115 Double_t getChi2Ndf() const {return _chi2_ndof;}
00116 Double_t get_smtdedx() const {return _smtdedx;}
00117 Double_t getrms_smtdedx() const {return _smtededx;}
00118 Double_t bz() const {return _bz;}
00119 Double_t det_etaCFT() const;
00120
00121
00122
00123 const Double_t* trpars() const {fill_trpars(); return _trpars;}
00124 Double_t trpars(Int_t i) const {fill_trpars(); return _trpars[i];}
00125 Double_t rdca() const {return _rdca;}
00126 Double_t z() const {return _z;}
00127 Double_t phid() const {return trpars(2);}
00128 Double_t tlm() const {return trpars(3);}
00129 Double_t qpt() const {return trpars(4);}
00130
00131
00132
00133 const Double_t* trerrs() const {return _trerrs;}
00134 Double_t trerrs(Int_t i) const {return _trerrs[i];}
00135 Double_t trerrs(Int_t i, Int_t j) const {
00136 return _trerrs[i>j ? i*(i+1)/2 + j : j*(j+1)/2 + i];}
00137
00138
00139
00140 Double_t xdca() const {return _xdca;}
00141 Double_t ydca() const {return _ydca;}
00142
00143
00144
00145 const Double_t* position() const {fill_trpos(); return _trpos;}
00146 Double_t x() const {return position()[0];}
00147 Double_t y() const {return position()[1];}
00148
00149
00150
00151 const Double_t* ps_position() const {return &_x_ps;}
00152 const Double_t* ps_momentum() const {return &_px_ps;}
00153
00154
00155
00156 const UInt_t* hitmask() const {return _hitmask;}
00157 UInt_t hitmask(Int_t i) const {return _hitmask[i];}
00158 Int_t nhit() const;
00159 Int_t ncft() const;
00160 Int_t nsmt() const {return nhit() - ncft();}
00161
00162
00163
00164 const TMBIsoTrack* getIsoTrk() const;
00165 void setIsoTRef(const TRef& isotref) {_isotref=isotref;}
00166
00167
00168
00169
00170
00171
00172
00173
00174 void propagate(const Double_t* surfpars) {
00175 propagate(surfpars[0], surfpars[1]);}
00176 void propagate(const TMBVertex* vert);
00177 void propagate(Double_t dcax, Double_t dcay);
00178
00179
00180
00181
00182
00183
00184 void impact(const TMBVertex* vert, Double_t* ip, Double_t* iperr=0) const;
00185 void impact(Double_t x, Double_t y, Double_t z, Double_t* ip,
00186 Double_t* iperr=0) const;
00187
00188
00189
00190
00191 void impact(const TMBVertex* vert, Double_t* ip, Double_t* iperr=0);
00192 void impact(Double_t x, Double_t y, Double_t z, Double_t* ip,
00193 Double_t* iperr=0);
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 void constrain(const TMBVertex* vert);
00213
00214
00215
00216
00217
00218 void constrain(Double_t x, Double_t y);
00219
00220 private:
00221
00222
00223
00224 void fill_trpars() const;
00225 void fill_trpos() const;
00226
00227 ClassDef(TMBTrack, 3);
00228 };
00229
00230 #endif // TMB_TREE_TMBTRACK_HPP__