14#include "TrkBase/TrkDifPoca.h"
15#include "CLHEP/Geometry/Point3D.h"
16#include "CLHEP/Matrix/Vector.h"
17#include "CLHEP/Vector/ThreeVector.h"
18#include "MdcRecoUtil/DifNumber.h"
19#include "MdcRecoUtil/DifPoint.h"
20#include "MdcRecoUtil/DifVector.h"
21#include "TrkBase/TrkDifTraj.h"
22#include "TrkBase/TrkErrCode.h"
23#include "TrkBase/TrkPoca.h"
29 if (
status().failure() )
return;
30 calcDist( traj1, traj2 );
36 if (
status().failure() )
return;
50 static Hep3Vector dirTem2;
61 if (
status().success() != 3 )
65 _doca = delta * between;
69 _doca = ( delta - delta.
dot( dir1 ) * dir1 ).length();
70 if ( dir1.dot( dir2 ) > 0. ) _doca.flipsign();
71 if ( fabs( _doca.number() ) < 0.0001 *
precision() )
86 static DifPoint posTraj;
88 DifPoint posPoint( pt );
90 DifVector delta = posTraj - posPoint;
93 DifNumber dist = delta.
length();
102 Hep3Vector fudgeVec( 0., 0.1 *
precision(), 0.0 );
104 { fudgeVec = Hep3Vector( 0.1 *
precision(), 0., 0. ); }
105 posPoint += fudgeVec;
106 delta = posTraj - posPoint;
108 _status.setSuccess( 20,
"TrkDifPoca: distance zero, calculation fudged." );
HepGeom::Point3D< double > HepPoint3D
EvtVector3R cross(const EvtVector3R &p1, const EvtVector3R &p2)
DifNumber dot(const DifVector &v) const
virtual void getInfo(double fltLen, HepPoint3D &pos, Hep3Vector &direction) const =0
TrkDifPoca(const TrkDifTraj &traj1, double flt1, const Trajectory &traj2, double flt2, double precision=1.e-5)
virtual void getDFInfo2(double fltLen, DifPoint &pos, DifVector &direction) const
TrkPocaBase(double flt1, double flt2, double precision)
const TrkErrCode & status() const
void minimize(const Trajectory &traj1, double f1, const Trajectory &traj2, double f2)