Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa/hitmap on MAIN
HitMap.java+18added 1.1
HitMapAddDriver.java+40added 1.1
HitMapCloneDriver.java+33added 1.1
HitMapFilter.java+90added 1.1
HitMapFilterDriver.java+41added 1.1
HitMapSubtractDriver.java+50added 1.1
HitMapToClusterListDriver.java+43added 1.1
HitMapToHitListDriver.java+36added 1.1
+351
8 added files
A try at a HitMap class, plus supporting classes and drivers

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMap.java added at 1.1
diff -N HitMap.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMap.java	6 Feb 2006 19:21:27 -0000	1.1
@@ -0,0 +1,18 @@
+package hitmap;
+
+import java.util.Map;
+import java.util.HashMap;
+import org.lcsim.event.CalorimeterHit;
+
+public class HitMap extends HashMap<Long,CalorimeterHit>
+{
+    public HitMap() {
+	super();
+    }
+    public HitMap(HitMap map) {
+	super(map);
+    }
+    public HitMap(Map<Long,CalorimeterHit> map) {
+	super(map);
+    }
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapAddDriver.java added at 1.1
diff -N HitMapAddDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapAddDriver.java	6 Feb 2006 19:21:27 -0000	1.1
@@ -0,0 +1,40 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+
+/**
+ * Add a number of named HitMaps together and write the
+ * combined HitMap to the event.
+ */
+
+public class HitMapAddDriver extends Driver
+{
+    public HitMapAddDriver() {
+    }
+
+    public void process(EventHeader event) 
+    {
+	HitMap outputHitMap = new HitMap();
+
+	// Read in each input map in turn:
+	for (String name : m_inputHitMapNames) {
+	    HitMap inputHitMap = (HitMap) (event.get(name));
+	    outputHitMap.putAll(inputHitMap);
+	}
+	
+	// Write the output to the event:
+	event.put(m_outputHitMapName, outputHitMap);
+    }
+
+    public void clearInputHitMaps() { m_inputHitMapNames.clear(); }
+    public void addInputHitMap (String name) { m_inputHitMapNames.add(name); }
+    public void setOutputHitMap(String name) { m_outputHitMapName= name; }
+
+    List<String> m_inputHitMapNames = new Vector<String>();
+    String m_outputHitMapName;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapCloneDriver.java added at 1.1
diff -N HitMapCloneDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapCloneDriver.java	6 Feb 2006 19:21:27 -0000	1.1
@@ -0,0 +1,33 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+
+/**
+ * Duplicate a named HitMap. This Driver reads in a HitMap
+ * from the event, clones it, then writes the clone out to
+ * the event.
+ */
+
+public class HitMapCloneDriver extends Driver
+{
+    public HitMapCloneDriver() {
+    }
+
+    public void process(EventHeader event) 
+    {
+	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
+	HitMap outputHitMap = new HitMap(inputHitMap);
+	event.put(m_outputHitMapName, outputHitMap);
+    }
+
+    public void setInputHitMap (String name) { m_inputHitMapName = name; }
+    public void setOutputHitMap(String name) { m_outputHitMapName= name; }
+
+    String m_inputHitMapName;
+    String m_outputHitMapName;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapFilter.java added at 1.1
diff -N HitMapFilter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapFilter.java	6 Feb 2006 19:21:28 -0000	1.1
@@ -0,0 +1,90 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.util.decision.*;
+
+/**
+ * A filter for HitMaps. Removes or retains hits according to a
+ * user-defined criterion. Examples of use cases: keeping only
+ * hits from the ECAL barrel; keeping only hits with a high local
+ * hit density; removing hits whose energy is below a threshold.
+ *
+ * User-defined decision-makers are supplied in one of three forms:
+ *   (i)   a DecisionMakerSingle<Long> which is applied to each cell id;
+ *   (ii)  a DecisionMakerSingle<CalorimeterHit> which is applied to each hit;
+ *   (iii) a DecisionMakerPair<Long,CalorimeterHit> which is applied to each pairing.
+ * Only one decision-maker is active at a time; setting a new decision-maker
+ * over-writes any previous decision-maker.
+ */
+
+public class HitMapFilter
+{
+    public HitMapFilter() {
+    }
+
+    public void setDecisionOnPair(DecisionMakerPair<Long,CalorimeterHit> decision) { 
+	m_inputDecisionPair = decision;
+	m_inputDecisionLong = null;
+	m_inputDecisionHit = null;
+    }
+    public void setDecisionOnID(DecisionMakerSingle<Long> decision) { 
+	m_inputDecisionLong = decision;
+	m_inputDecisionHit = null;
+	m_inputDecisionPair = null;
+    }
+    public void setDecisionOnHit(DecisionMakerSingle<CalorimeterHit> decision) { 
+	m_inputDecisionHit = decision;
+	m_inputDecisionLong = null;
+	m_inputDecisionPair = null;
+    }
+
+    public HitMap filter(HitMap inputHitMap)
+    {
+	// First, verify that we have one and only one decision active.
+	{
+	    int count = 0;
+	    if (m_inputDecisionHit  != null) { count++; }
+	    if (m_inputDecisionLong != null) { count++; }
+	    if (m_inputDecisionPair != null) { count++; }
+	    if (count == 0) {
+		// This can happen if the user hasn't defined a decision
+		// yet (or defined one as null).
+		throw new NullPointerException("Input decision is null");
+	    } else if (count > 1) {
+		// This should never happen
+		throw new AssertionError("Book-keeping error: # decisions defined = "+count+" (should be 1).");
+	    }
+	}
+
+	// Now, apply that decision
+	HitMap outputHitMap = new HitMap();
+	Set<Map.Entry<Long,CalorimeterHit>> entries = inputHitMap.entrySet();
+	for (Map.Entry<Long,CalorimeterHit> pair : entries) {
+	    Long id = pair.getKey();
+	    CalorimeterHit hit = pair.getValue();
+	    boolean passesFilter = false;
+	    if (m_inputDecisionHit != null) {
+		passesFilter = m_inputDecisionHit.valid(hit);
+	    }
+	    if (m_inputDecisionLong != null) {
+		passesFilter = m_inputDecisionLong.valid(id);
+	    }
+	    if (m_inputDecisionPair != null) {
+		passesFilter = m_inputDecisionPair.valid(id,hit);
+	    }
+	    if (passesFilter) {
+		outputHitMap.put(id,hit);
+	    }
+	}
+	return outputHitMap;
+    }
+
+    DecisionMakerPair<Long,CalorimeterHit> m_inputDecisionPair = null;
+    DecisionMakerSingle<Long> m_inputDecisionLong = null;
+    DecisionMakerSingle<CalorimeterHit> m_inputDecisionHit = null;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapFilterDriver.java added at 1.1
diff -N HitMapFilterDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapFilterDriver.java	6 Feb 2006 19:21:28 -0000	1.1
@@ -0,0 +1,41 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.util.decision.*;
+
+/**
+ * This class is a Driver wrapper around the HitMapFilter class.
+ * It retrieves a named HitMap from the event, filters it
+ * according to the user-defined filter, then writes the filtered
+ * version to the event. The original HitMap is left unchanged
+ * (unless the output identical to the input name).
+ */
+
+public class HitMapFilterDriver extends Driver
+{
+    public HitMapFilterDriver() {
+    }
+    
+    public void process(EventHeader event) 
+    {
+	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
+	HitMap outputHitMap = m_filter.filter(inputHitMap);
+	event.put(m_outputHitMapName, outputHitMap);
+    }
+
+    public void setInputHitMap (String name) { m_inputHitMapName = name; }
+    public void setOutputHitMap(String name) { m_outputHitMapName= name; }
+
+    public void setFilter(HitMapFilter filter) { 
+	m_filter = filter;
+    }
+
+    HitMapFilter m_filter;
+    String m_inputHitMapName;
+    String m_outputHitMapName;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapSubtractDriver.java added at 1.1
diff -N HitMapSubtractDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapSubtractDriver.java	6 Feb 2006 19:21:28 -0000	1.1
@@ -0,0 +1,50 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+
+/**
+ * Driver to subtract two HitMaps. The first and second HitMaps
+ * are read from the event. Any hit in the first HitMap
+ * which is NOT in the second HitMap is put in an output
+ * HitMap and written to the event. Hits which are in
+ * both (or only in the second HitMap) are ignored.
+ *
+ * The input HitMaps are left unaltered (unless the output name is
+ * identical to one of the input names).
+ */
+
+public class HitMapSubtractDriver extends Driver
+{
+    public HitMapSubtractDriver() {
+    }
+
+    public void process(EventHeader event) 
+    {
+	// Get the input hit maps:
+	HitMap inputHitMap1 = (HitMap) (event.get(m_inputHitMapName1));
+	HitMap inputHitMap2 = (HitMap) (event.get(m_inputHitMapName2));
+
+	// Prepare the output HitMap. We start with a copy of
+	// the first input map, then remove any hits from the second.
+	HitMap outputHitMap = new HitMap(inputHitMap1);
+	for (Long id : inputHitMap2.keySet()) {
+	    outputHitMap.remove(id);
+	}
+	
+	// Write the output to the event:
+	event.put(m_outputHitMapName, outputHitMap);
+    }
+
+    public void setFirstHitMap (String name) { m_inputHitMapName1 = name; }
+    public void setSecondHitMap(String name) { m_inputHitMapName2 = name; }
+    public void setOutputHitMap(String name) { m_outputHitMapName = name; }
+
+    String m_inputHitMapName1;
+    String m_inputHitMapName2;
+    String m_outputHitMapName;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapToClusterListDriver.java added at 1.1
diff -N HitMapToClusterListDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapToClusterListDriver.java	6 Feb 2006 19:21:28 -0000	1.1
@@ -0,0 +1,43 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.recon.cluster.util.BasicCluster;
+
+ /**
+   * This class takes in a HitMap (i.e. a Map<Long,CalorimeterHit>)
+   * and converts it to a List of one-hit clusters (which can be accessed
+   * by the org.lcsim event browser and WIRED event display in JAS3.
+   */
+
+public class HitMapToClusterListDriver extends Driver
+{
+    public HitMapToClusterListDriver() {
+    }
+
+    public void process(EventHeader event) 
+    {
+	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
+	List<Cluster> outputClusterList = new Vector<Cluster>();
+	for (CalorimeterHit hit : inputHitMap.values()) {
+	    BasicCluster clus = new BasicCluster();
+	    clus.addHit(hit);
+	    outputClusterList.add(clus);
+	}
+	event.put(m_outputListName, outputClusterList);
+    }
+
+    public void setInputHitMap(String name) {
+	m_inputHitMapName = name;
+    }
+    public void setOutputList(String name) {
+	m_outputListName = name;
+    }
+
+    String m_inputHitMapName;
+    String m_outputListName;
+}

lcsim/src/org/lcsim/contrib/uiowa/hitmap
HitMapToHitListDriver.java added at 1.1
diff -N HitMapToHitListDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HitMapToHitListDriver.java	6 Feb 2006 19:21:28 -0000	1.1
@@ -0,0 +1,36 @@
+package hitmap;
+
+import java.util.*;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.CalorimeterHit;
+
+ /**
+   * This class takes in a HitMap (i.e. a Map<Long,CalorimeterHit>)
+   * and converts it to a List<CalorimeterHit>.
+   */
+
+public class HitMapToHitListDriver extends Driver
+{
+    public HitMapToHitListDriver() {
+    }
+
+    public void process(EventHeader event) 
+    {
+	HitMap inputHitMap = (HitMap) (event.get(m_inputHitMapName));
+	List<CalorimeterHit> outputList = new Vector<CalorimeterHit> ();
+	outputList.addAll(inputHitMap.values());
+	event.put(m_outputListName, outputList);
+    }
+    
+    public void setInputHitMap(String name) {
+	m_inputHitMapName = name;
+    }
+    public void setOutputList(String name) {
+	m_outputListName = name;
+    }
+    
+    String m_inputHitMapName;
+    String m_outputListName;
+}
CVSspam 0.2.8