Print

Print


Commit in lcsim/src/org/lcsim/recon/cluster/mipfinder on MAIN
TrackClusterDriver.java+41-261.5 -> 1.6
MJC: Refactor mip finder so it conforms to Clusterer interface

lcsim/src/org/lcsim/recon/cluster/mipfinder
TrackClusterDriver.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- TrackClusterDriver.java	19 Nov 2007 22:04:15 -0000	1.5
+++ TrackClusterDriver.java	3 Dec 2007 21:09:04 -0000	1.6
@@ -16,15 +16,16 @@
 import org.lcsim.geometry.IDDecoder;
 import org.lcsim.recon.cluster.util.ClusterSizeDecision;
 import org.lcsim.util.hitmap.HitMap;
+import org.lcsim.recon.cluster.util.Clusterer;
 
 /**
  * An alternative driver. This is designed to find any track
  * segment, not just MIPs.
  *
- * @version $Id: TrackClusterDriver.java,v 1.5 2007/11/19 22:04:15 mcharles Exp $
+ * @version $Id: TrackClusterDriver.java,v 1.6 2007/12/03 21:09:04 mcharles Exp $
  */
 
-public class TrackClusterDriver extends Driver
+public class TrackClusterDriver extends Driver implements Clusterer
 {
     /**
      * Constructor.
@@ -54,8 +55,41 @@
     {
 	// Fetch the hit map from the event:
 	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
+	List<Cluster> outputClusterList = createClusters(inputHitMap);
+	
+	// Write out clusters
+	int flag = 1<<LCIOConstants.CLBIT_HITS; // needed to make sure that hits appear when read back in
+	event.put(m_outputClusterListName, outputClusterList, Cluster.class, flag);
+
+	// Make the output hit list
+	HitMap outputHitMap = new HitMap(inputHitMap); // initially cloned
+	for (Cluster clus : outputClusterList) {
+	    for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+		outputHitMap.remove(hit.getCellID());
+	    }
+	}
+	// Write out hit list
+	event.put(m_outputHitMapName, outputHitMap);
+
+	// Optional debug printout
+	if (m_debug) {
+	    int outputHitCount = 0;
+	    for (Cluster clus : outputClusterList) {
+		outputHitCount += clus.getCalorimeterHits().size();
+	    }
+	    System.out.println(this.getClass().getName()+": Input hit map ("+inputHitMap.values().size()+" hits) --> output hitmap ("+outputHitMap.values().size()+" hits) + clusters ("+outputClusterList.size()+" clusters, "+outputHitCount+" hits");
+	}
+    }
+
+    // Process within Clusterer interface
+    public List<Cluster> createClusters(Map<Long,CalorimeterHit> inputHitMap) {
 	List<CalorimeterHit> inputHitList = new Vector<CalorimeterHit> (inputHitMap.values());
+	return createClusters(inputHitList);
+    }
 
+    // Process within Clusterer interface
+   public List<Cluster> createClusters(List<CalorimeterHit> hits)
+    {
 	// Look for track segments. Any isolated hit could be a seed...
         List<AbstractHitType> hitTypes = new Vector<AbstractHitType>();
         SingleHit singleHit = new SingleHit();
@@ -69,7 +103,7 @@
 	// This number should be the same for all hits.
 	int nLayers = 0; // We'll set this to the right number shortly
 	boolean firstCheck = true;
-	for (CalorimeterHit hit : inputHitMap.values()) {
+	for (CalorimeterHit hit : hits) {
 	    // Look up the number of layers for this hit's subdetector
 	    org.lcsim.geometry.Subdetector subdet = hit.getSubdetector();
 	    org.lcsim.geometry.layer.Layering layering = subdet.getLayering();
@@ -87,7 +121,7 @@
 
 	// OK. Next, separate the hits out according to their layer:
 	Map<Integer, List<CalorimeterHit>> hitsPerLayer = new HashMap<Integer, List<CalorimeterHit>>();
-	for (CalorimeterHit hit : inputHitMap.values()) {
+	for (CalorimeterHit hit : hits) {
 	    // Look up the layer of this hit:
 	    IDDecoder id = hit.getIDDecoder();
 	    id.setID(hit.getCellID());
@@ -103,7 +137,7 @@
 	
 	// Now run the cluster builder. We have to do this in a
 	// hackish way, unfortunately.
-	MIPClusterBuilder clusterBuilder = new MIPClusterBuilder(inputHitList, hitTypes); 
+	MIPClusterBuilder clusterBuilder = new MIPClusterBuilder(hits, hitTypes); 
 	clusterBuilder.setDebugMode(m_debug);
 	clusterBuilder.setNumberOfSeedLayers(1);
 	clusterBuilder.initialize();
@@ -150,27 +184,8 @@
 	    filteredTrackSegments = userListFilter.filterList(filteredTrackSegments);
 	}
 	
-	// Write out clusters
-	int flag = 1<<LCIOConstants.CLBIT_HITS; // needed to make sure that hits appear when read back in
-	event.put(m_outputClusterListName, filteredTrackSegments, Cluster.class, flag);
-
-	// Make the output hit list
-	HitMap outputHitMap = new HitMap(inputHitMap); // initially cloned
-	for (Cluster clus : filteredTrackSegments) {
-	    for (CalorimeterHit hit : clus.getCalorimeterHits()) {
-		outputHitMap.remove(hit.getCellID());
-	    }
-	}
-	// Write out hit list
-	event.put(m_outputHitMapName, outputHitMap);
-
-	if (m_debug) {
-	    int outputHitCount = 0;
-	    for (Cluster clus : filteredTrackSegments) {
-		outputHitCount += clus.getCalorimeterHits().size();
-	    }
-	    System.out.println(this.getClass().getName()+": Input hit map ("+inputHitMap.values().size()+" hits) --> output hitmap ("+outputHitMap.values().size()+" hits) + clusters ("+filteredTrackSegments.size()+" clusters, "+outputHitCount+" hits");
-	}
+	// Return clusters
+	return filteredTrackSegments;
     }
 	
     /**
CVSspam 0.2.8