8 #include "cdc/utilities/ClosestApproach.h"
17 double ClosestApproach(
const TVector3& bwp,
const TVector3& fwp,
const TVector3& posIn,
const TVector3& posOut,
18 TVector3& hitPosition, TVector3& wirePosition)
42 TVector3 wireLine = fwp - bwp;
43 TVector3 hitLine = posOut - posIn;
45 TVector3 hitXwire = hitLine.Cross(wireLine);
46 TVector3 wire2hit = fwp - posOut;
52 if (hitXwire.Mag() == 0) {
53 distance = wireLine.Cross(wire2hit).Mag() / wireLine.Mag();
55 t2 = (posIn - fwp).Dot(wireLine) / wireLine.Mag2();
57 double t1 = hitXwire.Dot(wire2hit.Cross(wireLine)) / hitXwire.Mag2();
58 hitPosition = posOut + t1 * hitLine;
59 t2 = hitXwire.Dot(wire2hit.Cross(hitLine)) / hitXwire.Mag2();
66 distance = fabs(wire2hit.Dot(hitXwire) / hitXwire.Mag());
80 wirePosition = fwp + t2 * wireLine;
double ClosestApproach(const TVector3 &bwp, const TVector3 &fwp, const TVector3 &posIn, const TVector3 &posOut, TVector3 &hitPosition, TVector3 &wirePosition)
Returns a closest distance between a track and a wire.
Abstract base class for different kinds of events.