10 #include "cdc/utilities/ClosestApproach.h"
19 double ClosestApproach(
const TVector3& bwp,
const TVector3& fwp,
const TVector3& posIn,
const TVector3& posOut,
20 TVector3& hitPosition, TVector3& wirePosition)
44 TVector3 wireLine = fwp - bwp;
45 TVector3 hitLine = posOut - posIn;
47 TVector3 hitXwire = hitLine.Cross(wireLine);
48 TVector3 wire2hit = fwp - posOut;
54 if (hitXwire.Mag() == 0) {
55 distance = wireLine.Cross(wire2hit).Mag() / wireLine.Mag();
57 t2 = (posIn - fwp).Dot(wireLine) / wireLine.Mag2();
59 double t1 = hitXwire.Dot(wire2hit.Cross(wireLine)) / hitXwire.Mag2();
60 hitPosition = posOut + t1 * hitLine;
61 t2 = hitXwire.Dot(wire2hit.Cross(hitLine)) / hitXwire.Mag2();
68 distance = fabs(wire2hit.Dot(hitXwire) / hitXwire.Mag());
82 wirePosition = fwp + t2 * wireLine;