lcsim/src/org/lcsim/contrib/uiowa/structural/likelihood
diff -u -r1.1 -r1.2
--- TrackToTrackDOCA.java 29 Sep 2005 21:04:50 -0000 1.1
+++ TrackToTrackDOCA.java 14 Oct 2005 17:43:56 -0000 1.2
@@ -5,20 +5,32 @@
import org.lcsim.event.Cluster;
import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
public class TrackToTrackDOCA implements StructuralLikelihoodQuantity
{
public TrackToTrackDOCA() {}
- public double evaluate(Cluster track1, Cluster track2)
+ public double evaluate(Cluster track1, Cluster track2) throws QuantityNotDefinedException
{
- Hep3Vector positionTrack1 = new BasicHep3Vector(track1.getPosition());
- Hep3Vector positionTrack2 = new BasicHep3Vector(track2.getPosition());
- Trajectory line1 = new Line(positionTrack1, track1.getIPhi(), track1.getITheta());
- Trajectory line2 = new Line(positionTrack2, track2.getIPhi(), track2.getITheta());
+ if (track1.getCalorimeterHits().size()<4 || track2.getCalorimeterHits().size()<4) {
+ throw new QuantityNotDefinedException("Need 4+ hits in each cluster to get direction, but they have "
+ +track1.getCalorimeterHits().size()
+ +" and "
+ +track2.getCalorimeterHits().size()
+ +" respectively.");
+ }
- // Routine to do this properly doesn't exist yet
- return Double.NaN;
+ // Need to find directions of the two clusters.
+ Line line1 = MiscUtilities.makeLine(track1);
+ Line line2 = MiscUtilities.makeLine(track2);
+
+ double[] distancesAlongLinesToPOCAs = Line.getPOCAOfLines(line1, line2);
+
+ Hep3Vector poca1 = line1.getPointAtDistance(distancesAlongLinesToPOCAs[0]);
+ Hep3Vector poca2 = line1.getPointAtDistance(distancesAlongLinesToPOCAs[1]);
+ double doca = VecOp.sub(poca1,poca2).magnitude();
+ return doca;
}