Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/monitoring on MAIN
SensorOccupancyPlotsDriver.java+105added 1.1
sensor occupancy plots isolated from MonitoringPlotsDriver

hps-java/src/main/java/org/lcsim/hps/monitoring
SensorOccupancyPlotsDriver.java added at 1.1
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
CVSspam 0.2.12


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