lcsim/src/org/lcsim/recon/pfa/identifier
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
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)