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