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; + } }