Commit in hps-java/src/main/java/org/lcsim/hps/monitoring on MAIN | |||
SensorOccupancyPlotsDriver.java | +105 | added 1.1 |
sensor occupancy plots isolated from MonitoringPlotsDriver
diff -N SensorOccupancyPlotsDriver.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ SensorOccupancyPlotsDriver.java 23 Mar 2012 22:50:14 -0000 1.1 @@ -0,0 +1,105 @@
+package org.lcsim.hps.monitoring; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogram1D; +import hep.aida.IPlotter; +import hep.aida.IPlotterStyle; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.lcsim.detector.tracker.silicon.SiSensor; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +public class SensorOccupancyPlotsDriver extends Driver implements Resettable { + + private AIDA aida = AIDA.defaultInstance(); + private IPlotter occuPlotter; + private Map<SiSensor,int[]> occupancyMap; + private String rawTrackerHitCollectionName = "RawTrackerHitMaker_RawTrackerHits"; + private String trackerName = "Tracker"; + private int eventCount; + + public SensorOccupancyPlotsDriver() + {} + + public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) { + this.rawTrackerHitCollectionName = rawTrackerHitCollectionName; + } + + protected void detectorChanged(Detector detector) { + + if (occuPlotter != null) + occuPlotter.hide(); + + // Setup plotter. + IAnalysisFactory fac = aida.analysisFactory(); + occuPlotter = fac.createPlotterFactory().create(detector.getDetectorName() + " : HPS SVT Sensor Occupancy Plots"); + IPlotterStyle pstyle = occuPlotter.style(); + pstyle.dataStyle().fillStyle().setColor("green"); + pstyle.dataStyle().markerStyle().setColor("green"); + pstyle.dataStyle().errorBarStyle().setVisible(false); + pstyle.statisticsBoxStyle().setVisible(false); + occuPlotter.createRegions(5, 4); // FIXME Hard-coded to 20 sensors. + + // Make a list of sensors in the SVT. + List<SiSensor> sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class); + int ns = sensors.size(); + + // Data structure for occupancy calculations by sensor. + occupancyMap = new HashMap<SiSensor,int[]>(); + for (SiSensor sensor : sensors) { + occupancyMap.put(sensor, new int[640]); + } + + aida.tree().cd("/"); + for (int i = 0; i < ns; i++) + { + IHistogram1D occupancyPlot = aida.histogram1D(sensors.get(i).getName(), 640, 0, 639); + occuPlotter.region(i).plot(occupancyPlot); + } + occuPlotter.show(); + } + + public void process(EventHeader event) { + + // Increment event counter. + ++eventCount; + + // Get collections from event. + List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); + + // Loop over RawTrackerHit collection. + for (RawTrackerHit hit : rawTrackerHits) { + // Increment hit counts for occupancy calculations. + int[] strips = occupancyMap.get((SiSensor) hit.getDetectorElement()); + strips[hit.getIdentifierFieldValue("strip")] += 1; + } + + // Occupancy plots are redrawn every event. + occuPlotter.clearRegions(); + int si = 0; + for (SiSensor sensor : occupancyMap.keySet()) { + int[] strips = occupancyMap.get(sensor); + aida.histogram1D(sensor.getName()).reset(); + for (int i = 0; i < strips.length; i++) { + double stripOccupancy = (double) strips[i] / (double) (eventCount); + if (stripOccupancy != 0) { + aida.histogram1D(sensor.getName()).fill(i, stripOccupancy); + } + } + occuPlotter.region(si).plot(aida.histogram1D(sensor.getName())); + ++si; + } + occuPlotter.show(); + } + + public void reset() { + eventCount = 0; + } +}
\ No newline at end of file
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1