Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa on MAIN
RemoveHitsFromClusters.java+98added 1.1
MJC: Something screwy with the last commit -- trying these individually.

lcsim/src/org/lcsim/contrib/uiowa
RemoveHitsFromClusters.java added at 1.1
diff -N RemoveHitsFromClusters.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RemoveHitsFromClusters.java	13 Oct 2008 07:16:15 -0000	1.1
@@ -0,0 +1,98 @@
+package org.lcsim.contrib.uiowa;
+
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.util.hitmap.HitMap;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+import org.lcsim.recon.cluster.util.BasicCluster;
+
+public class RemoveHitsFromClusters extends Driver 
+{
+    protected String m_inputClusterListName;
+    protected String m_inputMapName;
+    protected String m_outputClusterListName;
+
+    public RemoveHitsFromClusters(String inputClusterList, String inputMap, String outputClusterList) {
+	m_inputClusterListName = inputClusterList;
+	m_inputMapName = inputMap;
+	m_outputClusterListName = outputClusterList;
+    }
+
+    public void process(EventHeader event) {
+	{
+	    // DEBUG
+	    HitMap hitsEcalBarrel = (HitMap)(event.get("EcalBarrDigiHitMap"));
+	    HitMap hitsEcalEndcap = (HitMap)(event.get("EcalEndcapDigiHitMap"));
+	    HitMap hitsHcalBarrel = (HitMap)(event.get("HcalBarrDigiHitMap"));
+	    HitMap hitsHcalEndcap = (HitMap)(event.get("HcalEndcapDigiHitMap"));
+	    HitMap hitsMcalBarrel = (HitMap)(event.get("MuonBarrDigiHitMap"));
+	    HitMap hitsMcalEndcap = (HitMap)(event.get("MuonEndcapDigiHitMap"));
+	    System.out.println("DEBUG: hitsEcalBarrel contains "+hitsEcalBarrel.size()+" hits");
+	    System.out.println("DEBUG: hitsEcalEndcap contains "+hitsEcalEndcap.size()+" hits");
+	    System.out.println("DEBUG: hitsHcalBarrel contains "+hitsHcalBarrel.size()+" hits");
+	    System.out.println("DEBUG: hitsHcalEndcap contains "+hitsHcalEndcap.size()+" hits");
+	    System.out.println("DEBUG: hitsMcalBarrel contains "+hitsMcalBarrel.size()+" hits");
+	    System.out.println("DEBUG: hitsMcalEndcap contains "+hitsMcalEndcap.size()+" hits");
+	    HitMap test1 = (HitMap)(event.get("AllDigiHitMap"));
+	    System.out.println("DEBUG: AllDigiHitMap contains "+test1.size()+" hits");
+	    HitMap test2 = (HitMap)(event.get("RecoDigiHitMapWithoutMuons"));
+	    System.out.println("DEBUG: RecoDigiHitMapWithoutMuons contains "+test2.size()+" hits");
+	}
+
+	// Which hits will we remove?
+	Map<Track,Cluster> inputMap = (Map<Track,Cluster>)(event.get(m_inputMapName));
+	Set<CalorimeterHit> hitsToRemove = new HashSet<CalorimeterHit>();
+	for (Cluster clus : inputMap.values()) {
+	    hitsToRemove.addAll(clus.getCalorimeterHits());
+	}
+	System.out.println("DEBUG: RemoveHitsFromClusters: Flagged "+hitsToRemove.size()+" MIP/muon hits that will be removed if found in a photon cluster");
+	// Remove those:
+	List<Cluster> inputClusterList = event.get(Cluster.class, m_inputClusterListName);
+	List<Cluster> outputClusterList = new Vector<Cluster>();
+	System.out.println("DEBUG: RemoveHitsFromClusters: Will scan "+inputClusterList.size()+" photon clusters...");
+	for (Cluster inputClus : inputClusterList) {
+	    // Photons have a core & halo
+	    Cluster oldCore = inputClus.getClusters().get(0);
+	    Set<CalorimeterHit> oldCoreHits = new HashSet<CalorimeterHit>();
+	    oldCoreHits.addAll(oldCore.getCalorimeterHits());
+	    Set<CalorimeterHit> oldHaloHits = new HashSet<CalorimeterHit>();
+	    oldHaloHits.addAll(inputClus.getCalorimeterHits());
+	    oldHaloHits.removeAll(oldCoreHits);
+	    if (oldCoreHits.size() + oldHaloHits.size() != inputClus.getCalorimeterHits().size()) { throw new AssertionError("Book-keeping error!"); }
+	    System.out.println("DEBUG: RemoveHitsFromClusters: Checking a cluster with "+inputClus.getCalorimeterHits().size()+" hits ("+oldCoreHits.size()+" core + "+oldHaloHits.size()+" halo)");
+	    // Remove hits as needed:
+	    Set<CalorimeterHit> newCoreHits = new HashSet<CalorimeterHit>();
+	    Set<CalorimeterHit> newHaloHits = new HashSet<CalorimeterHit>();
+	    newCoreHits.addAll(oldCoreHits);
+	    newHaloHits.addAll(oldHaloHits);
+	    newCoreHits.removeAll(hitsToRemove);
+	    newHaloHits.removeAll(hitsToRemove);
+	    System.out.println("DEBUG: RemoveHitsFromClusters: After purging MIP hits, "+newCoreHits.size()+" core + "+newHaloHits.size()+" halo hits remain.");
+	    // Build output cluster -- must have at least one hit left in core.
+	    if (newCoreHits.size() > 0) {
+		// Set up core & halo hits for new cluster:
+		BasicCluster outputCore = new BasicCluster();
+		BasicCluster outputClus = new BasicCluster();
+		for (CalorimeterHit hit : newCoreHits) {
+		    outputCore.addHit(hit);
+		}
+		outputClus.addCluster(outputCore);
+		for (CalorimeterHit hit : newHaloHits) {
+		    outputClus.addHit(hit);
+		}
+		// Sanity checks
+		if (outputClus.getCalorimeterHits().size() == 0) { throw new AssertionError("Book-keeping error!"); }
+		if (outputClus.getCalorimeterHits().size() > inputClus.getCalorimeterHits().size() ) { throw new AssertionError("Book-keeping error!"); }
+		// All good -- keep it
+		outputClusterList.add(outputClus);
+		System.out.println("DEBUG: RemoveHitsFromClusters: Wrote out updated cluster with "+outputClus.getCalorimeterHits().size()+" hits.");
+	    } else {
+		System.out.println("DEBUG: RemoveHitsFromClusters: Skipped writing an output cluster since there were "+newCoreHits.size()+" core hits left.");
+	    }
+	}
+	// Write out
+	event.put(m_outputClusterListName, outputClusterList);
+    }
+}
CVSspam 0.2.8