Print

Print


Author: [log in to unmask]
Date: Fri May 15 21:34:37 2015
New Revision: 2984

Log:
option to drop events with small hits

Modified:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java	Fri May 15 21:34:37 2015
@@ -17,6 +17,8 @@
 import hep.aida.jfree.plotter.PlotterRegion;
 import hep.aida.ref.rootwriter.RootFileStore;
 import hep.physics.vec.Hep3Vector;
+import java.util.HashSet;
+import java.util.Set;
 import org.hps.monitoring.subsys.StatusCode;
 import org.hps.monitoring.subsys.Subsystem;
 import org.hps.monitoring.subsys.SystemStatus;
@@ -96,11 +98,17 @@
     private double minPeakOccupancy = 0.0001;
     private double maxPeakOccupancy = 0.01;
 
+    private boolean dropSmallHitEvents = true;
+
     public SensorOccupancyPlotsDriver() {
         maxSampleStatus = new SystemStatusImpl(Subsystem.SVT, "Checks that SVT is timed in (max sample plot)", true);
         maxSampleStatus.setStatus(StatusCode.UNKNOWN, "Status is unknown.");
         occupancyStatus = new SystemStatusImpl(Subsystem.SVT, "Checks SVT occupancy", true);
         occupancyStatus.setStatus(StatusCode.UNKNOWN, "Status is unknown.");
+    }
+
+    public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
+        this.dropSmallHitEvents = dropSmallHitEvents;
     }
 
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
@@ -447,6 +455,10 @@
         }
         // Get RawTrackerHit collection from event.
         List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+
+        if (SvtPlotUtils.countSmallHits(rawHits) > 3) {
+            return;
+        }
 
         if (resetPeriod > 0 && eventCount > resetPeriod) { //reset occupancy numbers after resetPeriod events
             eventCount = 0;

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java	Fri May 15 21:34:37 2015
@@ -16,6 +16,8 @@
 import hep.aida.jfree.plotter.Plotter;
 import hep.aida.jfree.plotter.PlotterRegion;
 import hep.aida.ref.rootwriter.RootFileStore;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
@@ -67,6 +69,12 @@
     private String fittedHitsCollectionName = "SVTFittedRawTrackerHits";
 
     private int runNumber = -1;
+
+    private boolean dropSmallHitEvents = true;
+
+    public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
+        this.dropSmallHitEvents = dropSmallHitEvents;
+    }
 
     private int computePlotterRegion(HpsSiSensor sensor) {
 
@@ -240,7 +248,7 @@
                 histogramFactory.createHistogram2D("Top Cluster Time vs. Trigger Phase", 100, -50, 50, 6, -2, 22));
         plotters.get("SVT-trigger timing top-bottom").region(0).plot(hitTimeTrigTimePlots.get("Top"), this.createStyle(null, "Cluster Time [ns]", "Trigger Phase[ns]"));
         hitTimeTrigTimePlots.put("Bottom",
-                histogramFactory.createHistogram2D("Top Cluster Time vs. Trigger Phase", 100, -50, 50, 6, -2, 22));
+                histogramFactory.createHistogram2D("Bottom Cluster Time vs. Trigger Phase", 100, -50, 50, 6, -2, 22));
         plotters.get("SVT-trigger timing top-bottom").region(1).plot(hitTimeTrigTimePlots.get("Bottom"), this.createStyle(null, "Cluster Time [ns]", "Trigger Phase[ns]"));
 
         plotters.put("SVT-trigger timing by phase", plotterFactory.create("SVT-trigger timing by phase"));
@@ -285,6 +293,15 @@
             return;
         }
 
+        if (event.hasCollection(RawTrackerHit.class, "SVTRawTrackerHits")) {
+            // Get RawTrackerHit collection from event.
+            List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, "SVTRawTrackerHits");
+
+            if (SvtPlotUtils.countSmallHits(rawHits) > 3) {
+                return;
+            }
+        }
+
         // Get the list of clusters in the event
         List<SiTrackerHitStrip1D> clusters = event.get(SiTrackerHitStrip1D.class, clusterCollectionName);
 

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtHitPlots.java	Fri May 15 21:34:37 2015
@@ -11,8 +11,10 @@
 import hep.aida.jfree.plotter.PlotterRegion;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.util.Driver;
@@ -52,12 +54,18 @@
 
     private static final String SUBDETECTOR_NAME = "Tracker";
     private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
-
+    
     // Counters
     double eventCount = 0;
     double totalHitCount = 0;
     double totalTopHitCount = 0;
     double totalBotHitCount = 0;
+
+    private boolean dropSmallHitEvents = true;
+
+    public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
+        this.dropSmallHitEvents = dropSmallHitEvents;
+    }
 
     private int computePlotterRegion(HpsSiSensor sensor) {
 
@@ -225,6 +233,10 @@
         // Get RawTrackerHit collection from event.
         List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
 
+        if (SvtPlotUtils.countSmallHits(rawHits) > 3) {
+            return;
+        }
+
         this.clearHitMaps();
         for (RawTrackerHit rawHit : rawHits) {
             HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement();

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java	Fri May 15 21:34:37 2015
@@ -2,6 +2,11 @@
 
 import hep.aida.IPlotterFactory;
 import hep.aida.IPlotterStyle;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.RawTrackerHit;
 
@@ -95,4 +100,44 @@
 
         return style;
     }
+
+    public static int countSmallHits(List<RawTrackerHit> rawHits) {
+        int smallHitCount = 0;
+        Map<HpsSiSensor, Set<Integer>> hitMap = new HashMap<HpsSiSensor, Set<Integer>>();
+
+        for (RawTrackerHit hit : rawHits) {
+            HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
+            Set<Integer> hitStrips = hitMap.get(sensor);
+            if (hitStrips == null) {
+                hitStrips = new HashSet<Integer>();
+                hitMap.put(sensor, hitStrips);
+            }
+            int strip = hit.getIdentifierFieldValue("strip");
+            hitStrips.add(strip);
+        }
+
+        for (RawTrackerHit hit : rawHits) {
+            if (isSmallHit(hitMap, hit)) {
+                smallHitCount++;
+            }
+        }
+        return smallHitCount;
+    }
+
+    public static boolean isSmallHit(Map<HpsSiSensor, Set<Integer>> hitMap, RawTrackerHit hit) {
+        HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
+        int strip = hit.getIdentifierFieldValue("strip");
+        double pedestal = sensor.getPedestal(strip, 0);
+        double noise = sensor.getNoise(strip, 0);
+
+        if (hitMap.get(sensor) != null && (hitMap.get(sensor).contains(strip - 1) || hitMap.get(sensor).contains(strip + 1))) {
+            return false;
+        }
+        for (int i = 0; i < 6; i++) {
+            if (hit.getADCValues()[i] > pedestal + 4.0 * noise) {
+                return false;
+            }
+        }
+        return true;
+    }
 }