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