Commit in lcsim/src/org/lcsim/recon/cluster/mipfinder on MAIN
MipFinderCrossingBarrelEndcapBorder.java+26-31.1 -> 1.2
MJC: Fix typo bug in mip reconstruction; also require >= 4 layers

lcsim/src/org/lcsim/recon/cluster/mipfinder
MipFinderCrossingBarrelEndcapBorder.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- MipFinderCrossingBarrelEndcapBorder.java	5 Jun 2008 17:01:36 -0000	1.1
+++ MipFinderCrossingBarrelEndcapBorder.java	5 Jun 2008 20:32:45 -0000	1.2
@@ -22,7 +22,7 @@
  * able to move from the barrel to the endcap (or vice versa).
  *
  * @author [log in to unmask]
- * @version $Id: MipFinderCrossingBarrelEndcapBorder.java,v 1.1 2008/06/05 17:01:36 mcharles Exp $
+ * @version $Id: MipFinderCrossingBarrelEndcapBorder.java,v 1.2 2008/06/05 20:32:45 mcharles Exp $
  */
 
 public class MipFinderCrossingBarrelEndcapBorder extends TrackClusterDriver
@@ -150,7 +150,7 @@
 		if (minDist1 <= minDist2 && minDist1 <= minDist3 && minDist1 <= minDist4) {
 		    bestEndcapInner = true; bestBarrelInner = true;
 		    minDist = minDist1;
-		} else if (minDist2 <= minDist1 && minDist2 <= minDist3 && minDist3 <= minDist4) {
+		} else if (minDist2 <= minDist1 && minDist2 <= minDist3 && minDist2 <= minDist4) {
 		    bestEndcapInner = true; bestBarrelInner = false;
 		    minDist = minDist2;
 		} else if (minDist3 <= minDist1 && minDist3 <= minDist2 && minDist3 <= minDist4) {
@@ -160,7 +160,7 @@
 		    bestEndcapInner = false; bestBarrelInner = false;
 		    minDist = minDist4;
 		} else {
-		    throw new AssertionError("Unhandled case");
+		    throw new AssertionError("Unhandled case! minDist1="+minDist1+", minDist2="+minDist2+", minDist3="+minDist3+", minDist4="+minDist4);
 		}
 		boolean passesDistanceCut = (minDist < distCutOff);
 		System.out.println("DEBUG: Found candidate for connecting stubs! Distances are "+minDist1+", "+minDist2+", "+minDist3+", "+minDist4);
@@ -279,6 +279,29 @@
 	    }
 	}
 
+	// Remove clusters which don't span at least 4 different layers.
+	List<Cluster> clustersToRemove = new Vector<Cluster>();
+	for (Cluster clus : outputList) {
+	    Map<org.lcsim.geometry.Subdetector, Set<Integer>> layerMap = new HashMap<org.lcsim.geometry.Subdetector, Set<Integer>>();
+	    for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+		org.lcsim.geometry.Subdetector det = hit.getSubdetector();
+		Set<Integer> layerSet = layerMap.get(det);
+		if (layerSet == null) {
+		    layerSet = new HashSet<Integer>();
+		    layerMap.put(det, layerSet);
+		}
+		int layer = getLayer(hit);
+		layerSet.add(layer);
+	    }
+	    int layerCount = 0;
+	    for (Set<Integer> layerSet : layerMap.values()) {
+		layerCount += layerSet.size();
+	    }
+	    if (layerCount < 4) {
+		clustersToRemove.add(clus);
+	    }
+	}
+	outputList.removeAll(clustersToRemove);
 	return outputList;
     }
 
CVSspam 0.2.8