Print

Print


Author: [log in to unmask]
Date: Mon Dec  7 15:43:29 2015
New Revision: 4021

Log:
fix bug so that it actually does something.

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

Modified: java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java
 =============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java	(original)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/SvtHitMultiplicityFilter.java	Mon Dec  7 15:43:29 2015
@@ -7,7 +7,10 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 
@@ -20,9 +23,14 @@
  */
 public class SvtHitMultiplicityFilter extends EventReconFilter {
 
-     private final static String stripClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
+    Logger logger = Logger.getLogger(SvtHitMultiplicityFilter.class.getSimpleName());
+    private final static String stripClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
     private int hitsPerSensor = 1;
-    
+    private int minHitsPerHalf = 3;
+        
+    public SvtHitMultiplicityFilter() {
+       logger.setLevel(Level.WARNING);
+    }
     
     @Override
     protected void process(EventHeader event) {
@@ -39,16 +47,29 @@
         
         Map<String, List<SiTrackerHitStrip1D> > sensorHitMap= new HashMap< String, List<SiTrackerHitStrip1D> >();
         
+        int nhits[] = {0,0};
+
         for(SiTrackerHitStrip1D cluster : stripClusters) {
             String sensorName = cluster.getRawHits().get(0).getDetectorElement().getName();
+            boolean isTop = ((HpsSiSensor) cluster.getRawHits().get(0).getDetectorElement()).isTopLayer();
+            if(isTop)
+                nhits[0]++;
+            else
+                nhits[1]++;
             
-            List<SiTrackerHitStrip1D> hits = sensorHitMap.get(sensorName);
-            if(hits == null) {
+            List<SiTrackerHitStrip1D> hits;
+            if(sensorHitMap.containsKey(sensorName))
+                hits = sensorHitMap.get(sensorName);
+            else {
                 hits = new ArrayList<SiTrackerHitStrip1D>();
+                sensorHitMap.put(sensorName, hits);
             }
             hits.add(cluster);
         }
         
+        // if none of the halves contains the required nr of hits, skip the event
+        if( nhits[0] < minHitsPerHalf && nhits[1] < minHitsPerHalf) 
+            skipEvent();
         
         // 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()) {
@@ -57,8 +78,14 @@
         }
 
 
-
-
+        
+        StringBuffer sb = new StringBuffer();
+        sb.append("Event with " + stripClusters.size() + " hits passed:\n");
+        for(SiTrackerHitStrip1D hit : stripClusters) {
+            sb.append(hit.getPositionAsVector().toString() + " " + hit.getRawHits().get(0).getDetectorElement().getName() + "\n");
+        }
+        logger.info(sb.toString());
+        
         
         incrementEventPassed();