Commit in lcsim/src/org/lcsim/recon/cluster/clumpfinder on MAIN
ClumpFinder.java+36-111.4 -> 1.5
MJC: Add simple constructor to ClumpFinder

lcsim/src/org/lcsim/recon/cluster/clumpfinder
ClumpFinder.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- ClumpFinder.java	19 Nov 2007 21:53:09 -0000	1.4
+++ ClumpFinder.java	17 Dec 2007 22:40:21 -0000	1.5
@@ -18,6 +18,7 @@
 import org.lcsim.util.decision.*;
 import org.lcsim.recon.cluster.util.ClusterSizeDecision;
 import org.lcsim.util.hitmap.HitMap;
+import org.lcsim.recon.cluster.util.Clusterer;
 
 /**
  * A Driver which finds dense clumps within clusters.
@@ -28,10 +29,10 @@
  * or more for each hit. This is hard-coded at the moment, but
  * should become a user-definable in a later version.
  * 
- * @version $Id: ClumpFinder.java,v 1.4 2007/11/19 21:53:09 mcharles Exp $
+ * @version $Id: ClumpFinder.java,v 1.5 2007/12/17 22:40:21 mcharles Exp $
  */
 
-public class ClumpFinder extends Driver
+public class ClumpFinder extends Driver implements Clusterer
 {
     protected String m_inputHitMapName;
     protected String m_outputClusterListName;
@@ -40,8 +41,15 @@
     protected DecisionMakerSingle<CalorimeterHit> m_seedDecision;
     protected DecisionMakerSingle<Cluster> m_clumpDecision;
 
+    /** Simple constructor. */
+    public ClumpFinder() {
+	m_hitDecision = new DummyDecisionMakerSingle<CalorimeterHit> (); // Default: All hits are valid
+	m_seedDecision = new DummyDecisionMakerSingle<CalorimeterHit> (); // Default: All seeds are valid
+	m_clumpDecision = new ClusterSizeDecision(6); // Default: Clumps must have >= 6 hits
+    }
+
     /**
-     * Constructor.
+     * Constructor, for when intended for use as a Driver.
      * @param inputHitMap       Make clusters from the hits in this HitMap
      * @param outputClusterList Write the clumps made to this list
      * @param outputHitMap      Write unused hits out to this HitMap
@@ -67,12 +75,34 @@
 	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
 
 	// Outputs:
-	Vector<Cluster> outputClusterList = new Vector<Cluster>();
+	List<Cluster> outputClusterList = this.createClusters(inputHitMap);
 	HitMap outputHitMap = new HitMap(inputHitMap); // initially cloned
+	for (Cluster clump: outputClusterList) {
+	    for (CalorimeterHit hitInClump : clump.getCalorimeterHits()) {
+		outputHitMap.remove(hitInClump.getCellID());
+	    }
+	}
 
+	// Write out:
+	event.put(m_outputHitMapName, outputHitMap);
+	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);
+    }
+
+    /** Clusterer interface. */
+    public List<Cluster> createClusters(Map<Long,CalorimeterHit> map) {
+	List<CalorimeterHit> hits = new Vector<CalorimeterHit>();
+	hits.addAll(map.values());
+	return createClusters(hits);
+    }
+
+    /** Clusterer interface. */
+    public List<Cluster> createClusters(List<CalorimeterHit> hits) 
+    {
+	List<Cluster> outputClusterList = new Vector<Cluster>();
 	// Clone the input hitmap to give a list of unused hits we can edit:
 	ListFilter<CalorimeterHit> hitFilter = new ListFilter<CalorimeterHit> (m_hitDecision);
-	List<CalorimeterHit> inputHits = hitFilter.filterList(inputHitMap.values());
+	List<CalorimeterHit> inputHits = hitFilter.filterList(hits);
 	// Filter these again, require high local density:
 	ListFilter<CalorimeterHit> densityFilter = new ListFilter<CalorimeterHit> (new HighHitDensityDecision(inputHits));
 	List<CalorimeterHit> unusedHits = densityFilter.filterList(inputHits);
@@ -91,16 +121,11 @@
 		    outputClusterList.add(clump);
 		    for (CalorimeterHit hitInClump : clump.getCalorimeterHits()) {
 			unusedHits.remove(hitInClump);
-			outputHitMap.remove(hitInClump.getCellID());
 		    }
 		}
 	    }
 	}
-
-	// Write out:
-	event.put(m_outputHitMapName, outputHitMap);
-	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);
+	return outputClusterList;
     }
 
     /**
CVSspam 0.2.8