lcsim/src/org/lcsim/recon/cluster/mipfinder
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;
}