Print

Print


Author: [log in to unmask]
Date: Mon Dec  7 11:34:19 2015
New Revision: 4015

Log:
filter on hits per sensor.

Added:
    java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java

Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java	(added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java	Mon Dec  7 11:34:19 2015
@@ -0,0 +1,73 @@
+/**
+ * 
+ */
+package org.hps.recon.filtering;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
+
+/**
+ * 
+ * Filter events based on max nr of strip hits
+ * 
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class SvtHitMultiplicityFilter extends EventReconFilter {
+
+     private final static String stripClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
+    private int hitsPerSensor = 1;
+    
+    
+    @Override
+    protected void process(EventHeader event) {
+     
+        incrementEventProcessed();
+        
+        // Make sure there are any strips in the event
+        if(!event.hasCollection(SiTrackerHitStrip1D.class, stripClusterCollectionName))
+            skipEvent();
+        
+        // Find all strip clusters in the events
+        List<SiTrackerHitStrip1D> stripClusters = event.get(SiTrackerHitStrip1D.class, stripClusterCollectionName);
+        
+        
+        Map<String, List<SiTrackerHitStrip1D> > sensorHitMap= new HashMap< String, List<SiTrackerHitStrip1D> >();
+        
+        for(SiTrackerHitStrip1D cluster : stripClusters) {
+            String sensorName = cluster.getRawHits().get(0).getDetectorElement().getName();
+            
+            List<SiTrackerHitStrip1D> hits = sensorHitMap.get(sensorName);
+            if(hits == null) {
+                hits = new ArrayList<SiTrackerHitStrip1D>();
+            }
+            hits.add(cluster);
+        }
+        
+        
+        // go through and check that the number of hits for each layer is what's required
+        for(Map.Entry<String, List<SiTrackerHitStrip1D>> entry : sensorHitMap.entrySet()) {
+            if( entry.getValue().size() != hitsPerSensor) 
+                skipEvent();
+        }
+
+
+
+
+        
+        incrementEventPassed();
+        
+    }
+    
+    public void setHitsPerSensor(int hitsPerSensor) {
+        this.hitsPerSensor = hitsPerSensor;
+    }
+
+
+       
+}