Print

Print


Commit in lcsim/src/org/lcsim/recon/cluster/util on MAIN
ClusterListFilterDriver.java+115added 1.1
Filter a list of clusters, writing out those that pass/fail and their hits to named lists.

lcsim/src/org/lcsim/recon/cluster/util
ClusterListFilterDriver.java added at 1.1
diff -N ClusterListFilterDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClusterListFilterDriver.java	4 Jul 2006 21:14:10 -0000	1.1
@@ -0,0 +1,115 @@
+package org.lcsim.recon.cluster.util;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.recon.cluster.util.BasicCluster;
+import org.lcsim.util.decision.*;
+import org.lcsim.util.hitmap.HitMap;
+
+/**
+ * Specialized version of ListFilterDriver<Cluster>.
+ * 
+ * This Driver applies a filter to a list of clusters in the event.
+ * Clusters and hits are written out into lists according to whether
+ * they pass or fail. In additional, HitMaps of the hits from clusters
+ * which pass/fail are written out.
+ *
+ * Writing out the HitMaps and list of failed clusters is optional; 
+ * the list of accepted clusters is always written out.
+ * 
+ * @version $Id: ClusterListFilterDriver.java,v 1.1 2006/07/04 21:14:10 mcharles Exp $
+ */
+
+public class ClusterListFilterDriver extends ListFilterDriver<Cluster>
+{
+    /**
+     * Simple constructor.
+     */
+    public ClusterListFilterDriver () {
+	super();
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param dec The DecisionMaker which will be applied.
+     * @param inputList The named List to read in and filter.
+     * @param outputList The name under which to write out the filtered List.
+     */
+    
+    public ClusterListFilterDriver(DecisionMakerSingle<Cluster> dec, String inputList, String outputList) {
+	super(dec, inputList, outputList);
+    }
+    
+    /** Process one event. */
+    public void process(EventHeader event) 
+    {
+	List<Cluster> inputClusterList = event.get(Cluster.class, m_inputListName);
+
+	// Which ones pass the filter?
+	// ---------------------------
+	ListFilter<Cluster> filter = new ListFilter<Cluster> (m_inputDecision);
+	List<Cluster> filteredInputList = filter.filterList(inputClusterList);
+	event.put(m_outputListName, filteredInputList);
+
+	// Which clusters fail the filter?
+	// -------------------------------
+	List<Cluster> failedClusterList = new Vector<Cluster>();
+	for (Cluster clus : inputClusterList) {
+	    if ( !(filteredInputList.contains(clus)) ) {
+		failedClusterList.add(clus);
+	    }
+	}
+	// Sanity check
+	if ( filteredInputList.size() + failedClusterList.size() != inputClusterList.size() ) {
+	    throw new AssertionError("Bookkeeping error");
+	}
+	// Write out the list that fail
+	if (m_outputClusterFailName != null) {
+	    event.put(m_outputClusterFailName, failedClusterList);
+	}
+	
+	// Which hits pass the filter?
+	// ---------------------------
+	if (m_outputHitMapPassedName != null) {
+	    HitMap outputHitMapPassed = new HitMap();
+	    for (Cluster clus : filteredInputList) {
+		for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+		    Long id = new Long(hit.getCellID());
+		    outputHitMapPassed.put(id,hit);
+		}
+	    }
+	    event.put(m_outputHitMapPassedName, outputHitMapPassed);
+	}
+
+	// Which hits fail the filter?
+	// ---------------------------
+	if (m_outputHitMapFailedName != null) {
+	    HitMap outputHitMapFailed = new HitMap();
+	    for (Cluster clus : failedClusterList) {
+		for (CalorimeterHit hit : clus.getCalorimeterHits()) {
+		    Long id = new Long(hit.getCellID());
+		    outputHitMapFailed.put(id,hit);
+		}
+	    }
+	    event.put(m_outputHitMapFailedName, outputHitMapFailed);
+	}
+    }
+
+    /** Name under which to write the list of clusters that fail (optional). */
+    public void setOutputClusterListFail(String name) {m_outputClusterFailName = name;}
+    /** Name under which to write the HitMap of hits from clusters that pass (optional). */
+    public void setOutputHitMapPass     (String name) {m_outputHitMapPassedName= name;}
+    /** Name under which to write the HitMap of hits from clusters that fail (optional). */
+    public void setOutputHitMapFail     (String name) {m_outputHitMapFailedName= name;}
+
+    protected String m_outputClusterFailName = null;
+    protected String m_outputHitMapPassedName = null;
+    protected String m_outputHitMapFailedName = null;
+}
CVSspam 0.2.8