Commit in lcsim/src/org/lcsim/recon/pfa/identifier on MAIN
HelixExtrapolator.java+2-21.1 -> 1.2
TrackHelixExtrapolator.java+17-41.1 -> 1.2
+19-6
2 modified files
MJC: Watch out for NaN return values from HelixSwimmer when doing extrapolation

lcsim/src/org/lcsim/recon/pfa/identifier
HelixExtrapolator.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- HelixExtrapolator.java	6 Sep 2008 23:47:00 -0000	1.1
+++ HelixExtrapolator.java	8 Sep 2008 23:08:24 -0000	1.2
@@ -195,9 +195,9 @@
 	    if (id == null) { throw new AssertionError("Failed to find endcap ID"); }
 	}
 	if (id != null && point != null) {
-	    long cell = id.findCellContainingXYZ(point);
+	    if (Double.isNaN(point.x()) || Double.isNaN(point.y()) || Double.isNaN(point.z())) { throw new AssertionError("ERROR: Asked to look up call with invalid co-ordinates."); }
+	    long cell = id.findCellContainingXYZ(point); // This gets stuck for point = (NaN, NaN, NaN)
 	    id.setID(cell);
-	    Hep3Vector cellCenter = id.getPositionVector();
 	    return new Long(cell);
 	} else {
 	    return null;

lcsim/src/org/lcsim/recon/pfa/identifier
TrackHelixExtrapolator.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TrackHelixExtrapolator.java	6 Sep 2008 23:47:00 -0000	1.1
+++ TrackHelixExtrapolator.java	8 Sep 2008 23:08:24 -0000	1.2
@@ -128,14 +128,25 @@
         double distanceToEndcap2 = m_swimmer.getDistanceToZ(-layer_z);
 	if (distanceToEndcap1>0) {
 	    return m_swimmer.getPointAtDistance(distanceToEndcap1);
-	} else {
+	} else if (distanceToEndcap2>0) {
 	    return m_swimmer.getPointAtDistance(distanceToEndcap2);
+	} else {
+	    // Both failed
+	    return null;
 	}
     }
     protected Hep3Vector extendToBarrelLayer(int layer, Vector<Double> barrel_layering_r, double barrel_zmin, double barrel_zmax ) {
 	double layer_r =  barrel_layering_r.get(layer);
+	System.out.println("DEBUG: extendToBarrelLayer: About to call HelixSwimmer.getDistanceToRadius for r="+layer_r);
 	double distance = m_swimmer.getDistanceToRadius(layer_r);
-	return m_swimmer.getPointAtDistance(distance);
+	if (!Double.isNaN(distance)) {
+	    // Extrapolated OK
+	    System.out.println("DEBUG: extendToBarrelLayer: About to call HelixSwimmer.getPointAtDistance for d="+distance);
+	    return m_swimmer.getPointAtDistance(distance);
+	} else {
+	    // Extrapolation failed
+	    return null;
+	}
     }
 
     // Internal stuff
@@ -149,9 +160,11 @@
         double distanceToEndcap2 = swimmer.getDistanceToZ(-m_ECAL_endcap_z);
         if (distanceToEndcap1>0) {
             return distanceToEndcap1;
-        } else {
+        } else if (distanceToEndcap2>0) {
             return distanceToEndcap2;
-        }
+        } else {
+	    return Double.NaN;
+	}
     }
     protected boolean isValidBarrelIntercept(HelixSwimmer swimmer, double alpha, double uncertainty) {
         // Must have -m_ECAL_barrel_z <= z <= +m_ECAL_barrel_z (within errors)
CVSspam 0.2.8