Author: [log in to unmask] Date: Fri Mar 13 15:33:42 2015 New Revision: 2435 Log: Monitoring driver that plots the raw hit samples for each of the hits on a sensor. Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SamplesPlots.java (with props) Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SamplesPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SamplesPlots.java (added) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SamplesPlots.java Fri Mar 13 15:33:42 2015 @@ -0,0 +1,125 @@ +package org.hps.monitoring.drivers.svt; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogram2D; +import hep.aida.IHistogramFactory; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; + +import org.lcsim.util.Driver; +import org.lcsim.geometry.Detector; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; + + +/** + * Monitoring driver that plots the raw hit signal shapes for each of the + * sensors. + * + * @author Omar Moreno <[log in to unmask]> + */ +public class SamplesPlots extends Driver { + + // TODO: Add documentation + // TODO: Set plot styles + + static { + hep.aida.jfree.AnalysisFactory.register(); + } + + static IHistogramFactory histogramFactory = IAnalysisFactory.create().createHistogramFactory(null); + IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory(); + + protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); + protected Map<HpsSiSensor, IHistogram2D> samplesPlots = new HashMap<HpsSiSensor, IHistogram2D>(); + private List<HpsSiSensor> sensors; + + private static final String SUBDETECTOR_NAME = "Tracker"; + private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; + + private int computePlotterRegion(HpsSiSensor sensor) { + + if (sensor.getLayerNumber() < 7) { + if (sensor.isTopLayer()) { + return 2*(sensor.getLayerNumber() - 1); + } else { + return 2*(sensor.getLayerNumber() - 1) + 1; + } + } else { + + if (sensor.isTopLayer()) { + if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) { + return 4*(sensor.getLayerNumber() - 7); + } else { + return 4*(sensor.getLayerNumber() - 7) + 1; + } + } else if (sensor.isBottomLayer()) { + if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) { + return 4*(sensor.getLayerNumber() - 7) + 2; + } else { + return 4*(sensor.getLayerNumber() - 7) + 3; + } + } + } + + return -1; + } + + protected void detectorChanged(Detector detector) { + + sensors + = detector.getSubdetector(SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class); + + if (sensors.size() == 0) { + throw new RuntimeException("No sensors were found in this detector."); + } + + plotters.put("L1-L3 Raw hit samples", plotterFactory.create("L1-L3 Raw hit samples")); + plotters.get("L1-L3 Raw hit samples").createRegions(6, 2); + + plotters.put("L4-L6 Raw hit samples", plotterFactory.create("L4-L6 Raw hit samples")); + plotters.get("L4-L6 Raw hit samples").createRegions(6, 4); + + for (HpsSiSensor sensor : sensors) { + + samplesPlots.put(sensor, + histogramFactory.createHistogram2D(sensor.getName() + " - Samples", 6, 0, 6, 1000, 1000, 7000)); + + if (sensor.getLayerNumber() < 7) { + plotters.get("L1-L3 Raw hit samples").region(this.computePlotterRegion(sensor)) + .plot(samplesPlots.get(sensor)); + } else { + plotters.get("L4-L6 Raw hit samples").region(this.computePlotterRegion(sensor)) + .plot(samplesPlots.get(sensor)); + } + } + + for (IPlotter plotter : plotters.values()) { + plotter.show(); + } + } + + public void process(EventHeader event) { + + if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) + return; + + // Get RawTrackerHit collection from event. + List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); + + for (RawTrackerHit rawHit : rawHits) { + + HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement(); + short[] adcValues = rawHit.getADCValues(); + + for (int sampleN = 0; sampleN < 6; sampleN++) { + samplesPlots.get(sensor).fill(sampleN, adcValues[sampleN]); + } + } + } +}