lcsim/src/org/lcsim/recon/pfa/identifier
diff -u -r1.6 -r1.7
--- TrackHelixExtrapolator.java 27 Oct 2008 18:48:20 -0000 1.6
+++ TrackHelixExtrapolator.java 12 Nov 2008 18:57:16 -0000 1.7
@@ -169,23 +169,27 @@
}
protected Hep3Vector extendToEndcapLayer(int layer, Vector<Double> endcap_layering_z, double endcap_rmin, double endcap_rmax ) {
double layer_z = Math.abs(endcap_layering_z.get(layer));
- double distanceToEndcap1 = m_swimmer.getDistanceToZ( layer_z);
- double distanceToEndcap2 = m_swimmer.getDistanceToZ(-layer_z);
- if (distanceToEndcap1>0) {
- return m_swimmer.getPointAtDistance(distanceToEndcap1);
- } else if (distanceToEndcap2>0) {
- return m_swimmer.getPointAtDistance(distanceToEndcap2);
+ double distanceToEndcap = m_swimmer.getDistanceToZ( layer_z);
+
+ Hep3Vector v = m_swimmer.getPointAtDistance(distanceToEndcap);
+ double found_endcap_polar_r = Math.sqrt(v.x()*v.x() + v.y()*v.y());
+ boolean validSolution = (found_endcap_polar_r >= endcap_rmin-m_cutSeparation && found_endcap_polar_r <= endcap_rmax+m_cutSeparation);
+ if(validSolution){
+ return v;
} 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);
double distance = m_swimmer.getDistanceToRadius(layer_r);
- if (!Double.isNaN(distance)) {
+
+ Hep3Vector v = m_swimmer.getPointAtDistance(distance);
+ double found_barrel_z = v.z();
+ boolean validSolution =(found_barrel_z >= barrel_zmin-m_cutSeparation && found_barrel_z <= barrel_zmax+m_cutSeparation);
+ if (!Double.isNaN(distance) && validSolution) {
// Extrapolated OK
- return m_swimmer.getPointAtDistance(distance);
+ return v;
} else {
// Extrapolation failed
return null;