#include <TrkBmSpotOnTrk.h>
Inheritance diagram for TrkBmSpotOnTrk:
Public Types | |
typedef std::unary_function< TrkHitOnTrk, bool > | predicate_type |
typedef std::unary_function< TrkHitOnTrk, bool > | predicate_type |
Public Member Functions | |
virtual int | ambig () const |
virtual int | ambig () const |
TrkBmSpotOnTrk * | clone (TrkRep *, const TrkDifTraj *t=0) const |
TrkBmSpotOnTrk * | clone (TrkRep *, const TrkDifTraj *t=0) const |
double | fltLen () const |
double | fltLen () const |
TrkErrCode | getFitStuff (double &deltaChi) const |
TrkErrCode | getFitStuff (HepVector &derivs, double &deltaChi) const |
TrkErrCode | getFitStuff (double &deltaChi) const |
TrkErrCode | getFitStuff (HepVector &derivs, double &deltaChi) const |
const TrkRep * | getParentRep () const |
const TrkRep * | getParentRep () const |
const TrkRecoTrk * | getParentTrack () const |
const TrkRecoTrk * | getParentTrack () const |
bool | hasResidual () const |
bool | hasResidual () const |
TrkFundHit * | hit () |
const TrkFundHit * | hit () const |
TrkFundHit * | hit () |
const TrkFundHit * | hit () const |
double | hitLen () const |
double | hitLen () const |
double | hitRms () const |
double | hitRms () const |
const Trajectory * | hitTraj () const |
const Trajectory * | hitTraj () const |
const HepPoint3D & | ip () const |
const HepPoint3D & | ip () const |
bool | isActive () const |
bool | isActive () const |
bool | isUsable () const |
bool | isUsable () const |
virtual unsigned | layerNumber () const |
virtual unsigned | layerNumber () const |
virtual const MdcHitOnTrack * | mdcHitOnTrack () const |
virtual const MdcHitOnTrack * | mdcHitOnTrack () const |
bool | mustUse () const |
bool | mustUse () const |
bool | operator< (const TrkHitOnTrk &rhs) const |
bool | operator< (const TrkHitOnTrk &rhs) const |
bool | operator== (const TrkHitOnTrk &) const |
bool | operator== (const TrkHitOnTrk &) const |
TrkRecoTrk * | parentTrack () const |
TrkRecoTrk * | parentTrack () const |
PdtPid::PidType | particleType () const |
PdtPid::PidType | particleType () const |
virtual void | print (std::ostream &) const |
virtual void | print (std::ostream &) const |
virtual void | printAll (std::ostream &) const |
virtual void | printAll (std::ostream &) const |
bool | resid (double &resid, double &residErr, bool exclude=false) const |
double | resid (bool exclude=false) const |
bool | resid (double &resid, double &residErr, bool exclude=false) const |
double | resid (bool exclude=false) const |
double | residual () const |
double | residual () const |
void | setActivity (bool turnOn) |
void | setActivity (bool turnOn) |
virtual void | setAmbig (int newambig) |
virtual void | setAmbig (int newambig) |
void | setFltLen (double f) |
void | setFltLen (double f) |
void | setHitRms (double newRms) |
void | setHitRms (double newRms) |
void | setUsability (int usability) |
void | setUsability (int usability) |
virtual const SvtHitOnTrack * | svtHitOnTrack () const |
virtual const SvtHitOnTrack * | svtHitOnTrack () const |
virtual bool | timeAbsolute (double &t, double &tErr) const |
virtual bool | timeAbsolute (double &t, double &tErr) const |
virtual bool | timeResid (double &t, double &tErr) const |
virtual bool | timeResid (double &t, double &tErr) const |
TrkBmSpotOnTrk (const HepPoint3D &ip, const HepSymMatrix &size) | |
TrkBmSpotOnTrk (const HepPoint3D &ip, const HepSymMatrix &size) | |
const TrkDifTraj * | trkTraj () const |
const TrkDifTraj * | trkTraj () const |
double | weight () const |
double | weight () const |
virtual TrkEnums::TrkViewInfo | whatView () const |
virtual TrkEnums::TrkViewInfo | whatView () const |
~TrkBmSpotOnTrk () | |
~TrkBmSpotOnTrk () | |
Protected Member Functions | |
double | GetRms () |
double | GetRms () |
TrkRep * | parentRep () const |
TrkRep * | parentRep () const |
void | setHitLen (double h) |
void | setHitLen (double h) |
void | setHitResid (double newResid) |
void | setHitResid (double newResid) |
void | setUnusedHit () |
void | setUnusedHit () |
void | setUsedHit () |
void | setUsedHit () |
TrkBmSpotOnTrk (const TrkBmSpotOnTrk &hitToBeCopied, TrkRep *newRep, const TrkDifTraj *trkTraj=0) | |
TrkBmSpotOnTrk (const TrkBmSpotOnTrk &hitToBeCopied, TrkRep *newRep, const TrkDifTraj *trkTraj=0) | |
virtual TrkErrCode | updateMeasurement (const TrkDifTraj *traj, bool maintainAmbiguity) |
virtual TrkErrCode | updateMeasurement (const TrkDifTraj *traj, bool maintainAmbiguity) |
TrkErrCode | updatePoca (const TrkDifTraj *trkTraj, bool maintainAmbiguity) |
TrkErrCode | updatePoca (const TrkDifTraj *trkTraj, bool maintainAmbiguity) |
Static Protected Member Functions | |
const TrkLineTraj | FindBeamTrajectory (const HepPoint3D &point, const HepSymMatrix &error) |
const TrkLineTraj | FindBeamTrajectory (const HepPoint3D &point, const HepSymMatrix &error) |
Protected Attributes | |
double | _hitLen |
double | _hitRms |
bool | _isActive |
int | _isUsable |
TrkRep * | _parentRep |
TrkRep * | _parentRep |
TrkPoca * | _poca |
TrkPoca * | _poca |
double | _resid |
TrkFundHit * | _theHit |
TrkFundHit * | _theHit |
double | _tolerance |
double | _trkLen |
const TrkDifTraj * | _trkTraj |
const TrkDifTraj * | _trkTraj |
Private Member Functions | |
TrkBmSpotOnTrk & | operator= (const TrkBmSpotOnTrk &) |
TrkBmSpotOnTrk & | operator= (const TrkBmSpotOnTrk &) |
TrkBmSpotOnTrk (const TrkBmSpotOnTrk &) | |
TrkBmSpotOnTrk (const TrkBmSpotOnTrk &) | |
Private Attributes | |
const TrkLineTraj | _beamTraj |
const HepPoint3D | _ip |
const HepSymMatrix | _size |
Friends | |
class | TrkBase::Functors::setActive |
class | TrkBase::Functors::setParent |
class | TrkBase::Functors::updateMeasurement |
|
|
|
|
|
00029 : TrkHitOnTrk(0,0.5e-4), 00030 _beamTraj(FindBeamTrajectory(ip,size)), 00031 _ip(ip), 00032 _size(size) 00033 {}
|
|
00045 { }
|
|
00037 : TrkHitOnTrk(hot,newRep,trkTraj), 00038 _beamTraj(hot._beamTraj), 00039 _ip(hot.ip()), 00040 _size(hot._size) 00041 {}
|
|
|
|
|
|
|
|
|
|
|
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. |
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. 00182 { 00183 return 0;// by default no ambiguity 00184 }
|
|
Implements TrkHitOnTrk. |
|
Implements TrkHitOnTrk. 00049 { 00050 return new TrkBmSpotOnTrk(*this,rep,trkTraj); 00051 }
|
|
|
|
00158 { 00159 int ifail; 00160 HepSymMatrix cover(error.inverse(ifail)); 00161 00162 if (ifail) { 00163 #ifdef MDCPATREC_FATAL 00164 std::cout<<"ErrMsg(fatal) TrkLineTraj: " 00165 <<"Error inverting beamspot error matrix" << std::endl; 00166 #endif 00167 } 00168 double dx = -cover.fast(3,1)/cover.fast(1,1); 00169 double dy = -cover.fast(3,2)/cover.fast(2,2); 00170 00171 HepPoint3D p1 = point + Hep3Vector(-dx,-dy,-1); 00172 HepPoint3D p2 = point + Hep3Vector(+dx,+dy,+1); 00173 00174 return TrkLineTraj( p1, p2 ); 00175 }
|
|
00091 {return _trkLen;}
|
|
00091 {return _trkLen;}
|
|
|
|
|
|
00272 { 00273 assert (_trkTraj == &(getParentRep()->traj())); 00274 deltaChi=_resid/hitRms(); // NOTE: use _INTERNAL_ residual 00275 return TrkErrCode(TrkErrCode::succeed); 00276 }
|
|
00249 { 00250 if (_poca==0 || _poca->status().failure()) { 00251 return TrkErrCode(TrkErrCode::fail); 00252 } 00253 // FIXME: I wish I could tell poca to NOT iterate 00254 // and ONLY compute the distance & derivatives... 00255 TrkDifPoca poca(*_trkTraj,fltLen(),*hitTraj(), hitLen(),_tolerance); 00256 if (poca.status().failure()) { 00257 return TrkErrCode(TrkErrCode::fail); 00258 } 00259 if (derivs.num_row() != 0) { 00260 poca.fetchDerivs(derivs); 00261 } else { 00262 derivs = poca.derivs(); 00263 } 00264 double sigInv = 1. / hitRms(); 00265 deltaChi = _resid * sigInv; // NOTE: use _INTERNAL_ residual 00266 derivs *= sigInv; 00267 return TrkErrCode(TrkErrCode::succeed); 00268 }
|
|
00073 {return _parentRep;}
|
|
00073 {return _parentRep;}
|
|
|
|
00153 { 00154 return getParentRep()->parentTrack(); 00155 }
|
|
|
|
00103 { 00104 // 00105 // Get direction 00106 // 00107 const TrkDifTraj& trkTraj = getParentRep()->traj(); 00108 Hep3Vector trkDir = trkTraj.direction(fltLen()); 00109 00110 // 00111 // Get errors (assume no correlation) 00112 // 00113 double Mxx = 1.0/_size.fast(1,1); 00114 double Myy = 1.0/_size.fast(2,2); 00115 00116 // 00117 // Normalized track directions in x/y 00118 // 00119 double vx = trkDir[0]; 00120 double vy = trkDir[1]; 00121 double normxy = (vx*vx + vy*vy); 00122 if (normxy <= 0) return 999.9; 00123 normxy = sqrt(normxy); 00124 00125 vx /= normxy; 00126 vy /= normxy; 00127 00128 // 00129 // Solve for point of least chi2 00130 // 00131 double s = vx*vy*(Mxx-Myy)/(vx*vx*Mxx + vy*vy*Myy); 00132 00133 double dx = (-vy + s*vx); 00134 double dy = (+vx + s*vy); 00135 00136 double chi2 = dx*dx*Mxx + dy*dy*Myy; 00137 00138 return chi2 <= 0 ? 0.0 : (1.0/sqrt(chi2)); 00139 }
|
|
00104 { return _poca != 0; }
|
|
00104 { return _poca != 0; }
|
|
00076 {return _theHit;}
|
|
00075 {return _theHit;}
|
|
00076 {return _theHit;}
|
|
00075 {return _theHit;}
|
|
00092 {return _hitLen;}
|
|
00092 {return _hitLen;}
|
|
00089 {return _hitRms;}
|
|
00089 {return _hitRms;}
|
|
Implements TrkHitOnTrk. |
|
Implements TrkHitOnTrk. 00080 {
00081 return &_beamTraj;
00082 }
|
|
|
|
00086 {
00087 return _ip;
00088 }
|
|
|
|
00200 {return _isActive;}
|
|
|
|
00201 {return (_isUsable > 0);}
|
|
Implements TrkHitOnTrk. 00036 { return 0; }
|
|
Implements TrkHitOnTrk. 00036 { return 0; }
|
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. |
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. 00030 {return 0;}
|
|
|
|
00202 {return (_isUsable > 1);}
|
|
|
|
|
|
|
|
|
|
|
|
00176 { 00177 return this == &rhs; 00178 }
|
|
00177 { return _parentRep;}
|
|
00177 { return _parentRep;}
|
|
|
|
00147 { 00148 return parentRep()->parentTrack(); 00149 }
|
|
|
|
00159 { 00160 return getParentRep()->particleType(); 00161 }
|
|
|
|
00132 { 00133 hit()->printAll(o); 00134 o << " hitlen " << hitLen() 00135 << " fltlen " << fltLen() 00136 << " act " << (isActive() != 0) << endl; 00137 }
|
|
|
|
00141 { 00142 print(o); 00143 }
|
|
|
|
|
|
00206 { 00207 assert(getParentRep()!=0); 00208 return getParentRep()->resid(this,resid,residErr,exclude); 00209 }
|
|
00192 { 00193 double r(-99999.9),re(-9999.9); 00194 bool s=getParentRep()->resid(this,r,re,exclude); 00195 if (!s && r<-99999.8) { 00196 #ifdef MDCPATREC_ROUTINE 00197 std::cout<<"ErrMsg(routine) " 00198 << "error calling parentRep()->residual()" << std::endl; 00199 #endif 00200 } 00201 return r; 00202 }
|
|
|
|
00213 { 00214 assert (_trkTraj == &(getParentRep()->traj())); 00215 return _resid; 00216 }
|
|
|
|
00097 { 00098 if (!isUsable() || isActive()==turnOn) return; 00099 if (getParentRep() != 0) { // needed until Rep-less HoTs go away 00100 turnOn ? parentRep()->activateHot(this) 00101 : parentRep()->deactivateHot(this); 00102 } else { 00103 _isActive = turnOn; 00104 } 00105 }
|
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. |
|
Reimplemented in MdcHitOnTrack, and MdcHitOnTrack. 00188 {} // by default nothing to set
|
|
00147 {_trkLen = f;}
|
|
00147 {_trkLen = f;}
|
|
00178 {_hitLen = h;}
|
|
00178 {_hitLen = h;}
|
|
00176 {_resid = newResid;}
|
|
00176 {_resid = newResid;}
|
|
00154 {_hitRms = newRms;}
|
|
00154 {_hitRms = newRms;}
|
|
|
|
00171 { 00172 if (hit() != 0) hit()->setUnusedHit(this); 00173 }
|
|
|
|
00109 { 00110 _isUsable = usability; 00111 if (isActive() && !isUsable()) { 00112 _isActive = false; 00113 if(getParentRep() != 0)parentRep()->deactivateHot(this); 00114 } 00115 if (!isActive() && mustUse()) { 00116 _isActive = true; 00117 if(getParentRep() != 0)parentRep()->activateHot(this); 00118 } 00119 }
|
|
|
|
00165 { 00166 if (hit() != 0) hit()->setUsedHit(this); 00167 }
|
|
|
|
00031 {return 0;}
|
|
Implements TrkHitOnTrk. 00043 { return false; }
|
|
Implements TrkHitOnTrk. 00043 { return false; }
|
|
Implements TrkHitOnTrk. 00042 { return false; }
|
|
Implements TrkHitOnTrk. 00042 { return false; }
|
|
00077 { return _trkTraj;}
|
|
00077 { return _trkTraj;}
|
|
Implements TrkHitOnTrk. |
|
Implements TrkHitOnTrk. 00056 { 00057 TrkErrCode status=updatePoca(traj,x); 00058 if (status.success()) { 00059 assert(_poca!=0); 00060 setHitResid(_poca->doca()); 00061 setHitRms(GetRms()); 00062 } else { 00063 #ifdef MDCPATREC_WARNING 00064 std::cout<<"ErrMsg(warning) TrkBmSpotOnTrk::updateMeasurement failed" << std::endl; 00065 #endif 00066 setHitResid(9999.9); 00067 setHitRms(9999.9); 00068 } 00069 return status; 00070 }
|
|
|
|
00220 { 00221 _trkTraj = (trkTraj!=0?trkTraj:&(getParentRep()->traj())); 00222 if (_poca==0) { 00223 _poca = new TrkPoca(*_trkTraj,fltLen(), 00224 *hitTraj(), hitLen(),_tolerance); 00225 } else { 00226 *_poca = TrkPoca(*_trkTraj,fltLen(), 00227 *hitTraj(), hitLen(),_tolerance); 00228 } 00229 if(_poca->status().failure()) { 00230 if(isActive()){ 00231 #ifdef MDCPATREC_WARNING 00232 std::cout<<"ErrMsg(warning) " 00233 << " TrkPoca failed in TrkHitOnTrk::updatePoca" 00234 << std::endl; 00235 #endif 00236 } 00237 delete _poca; _poca=0; 00238 return TrkErrCode(TrkErrCode::fail,4); 00239 } 00240 _trkLen = _poca->flt1(); 00241 _hitLen = _poca->flt2(); 00242 double dca=_poca->doca(); 00243 if (!maintainAmb) setAmbig(dca>0?+1:-1); 00244 return TrkErrCode(TrkErrCode::succeed); 00245 }
|
|
|
|
00123 { 00124 // could be cached 00125 double rms=hitRms(); 00126 assert(rms > 0); 00127 return double(1) / ( rms * rms ); 00128 }
|
|
Implements TrkHitOnTrk. |
|
Implements TrkHitOnTrk. 00074 {
00075 return TrkEnums::xyView;
00076 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|