Author: [log in to unmask]
Date: Mon Apr 27 14:09:04 2015
New Revision: 2825
Log:
Reset plots between runs.
Modified:
java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.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 Mon Apr 27 14:09:04 2015
@@ -16,7 +16,6 @@
import hep.aida.ref.rootwriter.RootFileStore;
import hep.aida.jfree.plotter.Plotter;
import hep.aida.jfree.plotter.PlotterRegion;
-
import hep.physics.vec.Hep3Vector;
import org.lcsim.detector.tracker.silicon.HpsSiSensor;
@@ -30,7 +29,6 @@
/**
* This Driver makes plots of SVT sensor occupancies across a run.
- *
*
* @author Omar Moreno <[log in to unmask]>
*/
@@ -40,15 +38,19 @@
static {
hep.aida.jfree.AnalysisFactory.register();
}
-
- ITree tree;
- IHistogramFactory histogramFactory;
- IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
-
- protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
- protected Map<HpsSiSensor, IHistogram1D> occupancyPlots = new HashMap<HpsSiSensor, IHistogram1D>();
- protected Map<HpsSiSensor, IHistogram1D> occupancyVPositionPlots = new HashMap<HpsSiSensor, IHistogram1D>();
- protected Map<HpsSiSensor, int[]> occupancyMap = new HashMap<HpsSiSensor, int[]>();
+
+ // Plotting
+ private static ITree tree = null;
+ private IAnalysisFactory analysisFactory = IAnalysisFactory.create();
+ private IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory();
+ private IHistogramFactory histogramFactory;
+
+ // Histogram maps
+ static protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
+ static protected Map<String, IHistogram1D> occupancyPlots = new HashMap<String, IHistogram1D>();
+ static protected Map<String, IHistogram1D> positionPlots = new HashMap<String, IHistogram1D>();
+ static protected Map<String, int[]> occupancyMap = new HashMap<String, int[]>();
+
private List<HpsSiSensor> sensors;
private Map<HpsSiSensor, Map<Integer, Hep3Vector>> stripPositions = new HashMap<HpsSiSensor, Map<Integer, Hep3Vector>>();
@@ -115,17 +117,26 @@
return -1;
}
-
- protected void detectorChanged(Detector detector) {
-
- sensors = detector.getSubdetector(SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class);
-
- if (sensors.size() == 0) {
- throw new RuntimeException("There are no sensors associated with this detector");
- }
-
- // Create a Map from sensor to bad channels and from bad channels to
- // strip position
+
+ /**
+ * Get the global strip position of a physical channel number for a given
+ * sensor.
+ *
+ * @param sensor : HpsSiSensor
+ * @param physicalChannel : physical channel number
+ * @return The strip position (mm) in the global coordinate system
+ */
+ private Hep3Vector getStripPosition(HpsSiSensor sensor, int physicalChannel){
+ return stripPositions.get(sensor).get(physicalChannel);
+ }
+
+ /**
+ * For each sensor, create a mapping between a physical channel number and
+ * it's global strip position.
+ */
+ // TODO: Move this to a utility class
+ private void createStripPositionMap() {
+
for(ChargeCarrier carrier : ChargeCarrier.values()){
for(HpsSiSensor sensor : sensors){
if(sensor.hasElectrodesOnSide(carrier)){
@@ -142,10 +153,106 @@
}
}
}
-
- tree = IAnalysisFactory.create().createTreeFactory().create();
- histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
-
+ }
+
+ /**
+ * Create a plotter style.
+ *
+ * @param xAxisTitle : Title of the x axis
+ * @param sensor : HpsSiSensor associated with the plot. This is used to
+ * set certain attributes based on the position of the
+ * sensor.
+ * @return plotter style
+ */
+ // TODO: Move this to a utilities class
+ IPlotterStyle createOccupancyPlotStyle(String xAxisTitle, HpsSiSensor sensor) {
+ // Create a default style
+ IPlotterStyle style = this.plotterFactory.createPlotterStyle();
+
+ // Set the style of the X axis
+ style.xAxisStyle().setLabel(xAxisTitle);
+ style.xAxisStyle().labelStyle().setFontSize(14);
+ style.xAxisStyle().setVisible(true);
+
+ // Set the style of the Y axis
+ style.yAxisStyle().setLabel("Occupancy");
+ style.yAxisStyle().labelStyle().setFontSize(14);
+ style.yAxisStyle().setVisible(true);
+
+ // Turn off the histogram grid
+ style.gridStyle().setVisible(false);
+
+ // Set the style of the data
+ style.dataStyle().lineStyle().setVisible(false);
+ style.dataStyle().outlineStyle().setVisible(true);
+ style.dataStyle().outlineStyle().setThickness(3);
+ style.dataStyle().fillStyle().setVisible(true);
+ style.dataStyle().fillStyle().setOpacity(.10);
+ if (sensor.isTopLayer()) {
+ style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
+ style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
+ } else {
+ style.dataStyle().fillStyle().setColor("93, 228, 47, 1");
+ style.dataStyle().outlineStyle().setColor("93, 228, 47, 1");
+ }
+ style.dataStyle().errorBarStyle().setVisible(false);
+
+ // Turn off the legend
+ style.legendBoxStyle().setVisible(false);
+
+ style.regionBoxStyle().backgroundStyle().setOpacity(.10);
+ if (sensor.isAxial()) style.regionBoxStyle().backgroundStyle().setColor("229, 114, 31, 1");
+
+ return style;
+ }
+
+ /**
+ * Clear all histograms of it's current data.
+ */
+ private void resetPlots() {
+
+ // Clear the hit counter map of all previously stored data.
+ occupancyMap.clear();
+
+ // Since all plots are mapped to the name of a sensor, loop
+ // through the sensors, get the corresponding plots and clear them.
+ for (HpsSiSensor sensor : sensors) {
+
+ // Clear the occupancy plots.
+ occupancyPlots.get(sensor.getName()).reset();
+ positionPlots.get(sensor.getName()).reset();
+
+ // Reset the hit counters.
+ occupancyMap.put(sensor.getName(), new int[640]);
+ }
+ }
+
+ protected void detectorChanged(Detector detector) {
+
+ // Get the HpsSiSensor objects from the geometry
+ sensors = detector.getSubdetector(SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class);
+
+ // If there were no sensors found, throw an exception
+ if (sensors.size() == 0) {
+ throw new RuntimeException("There are no sensors associated with this detector");
+ }
+
+ // For each sensor, create a mapping between a physical channel number
+ // and the global strip position
+ this.createStripPositionMap();
+
+ // If the tree already exist, clear all existing plots of any old data
+ // they might contain.
+ if (tree != null) {
+ this.resetPlots();
+ return;
+ }
+
+ tree = analysisFactory.createTreeFactory().create();
+ histogramFactory = analysisFactory.createHistogramFactory(tree);
+
+ // Create the plotter and regions. A region is created for each
+ // sensor for a total of 36.
plotters.put("Occupancy", plotterFactory.create("Occupancy"));
plotters.get("Occupancy").createRegions(6, 6);
@@ -155,30 +262,32 @@
}
for (HpsSiSensor sensor : sensors) {
- occupancyPlots.put(sensor, histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy", 640, 0, 640));
+ occupancyPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy", 640, 0, 640));
plotters.get("Occupancy").region(this.computePlotterRegion(sensor))
- .plot(occupancyPlots.get(sensor), this.createOccupancyPlotStyle("Physical Channel", sensor));
+ .plot(occupancyPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Physical Channel", sensor));
if (enablePositionPlots) {
if (sensor.isTopLayer()) {
- occupancyVPositionPlots.put(sensor,
+ positionPlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy vs Position", 1000, 0, 60));
} else {
- occupancyVPositionPlots.put(sensor,
+ positionPlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy vs Position", 1000, -60, 0));
}
plotters.get("Occupancy vs Position").region(this.computePlotterRegion(sensor))
- .plot(occupancyVPositionPlots.get(sensor), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor));
- }
- occupancyMap.put(sensor, new int[640]);
- }
+ .plot(positionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor));
+ }
+ occupancyMap.put(sensor.getName(), new int[640]);
+ }
+
+ System.out.println("Size of occupancyPlots map: " + occupancyPlots.size());
for (IPlotter plotter : plotters.values()) {
- for (int regionN = 0; regionN < 36; regionN++) {
+ /*for (int regionN = 0; regionN < 36; regionN++) {
PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN));
region.getPanel().addMouseListener(new PopupPlotterListener(region));
- }
+ }*/
plotter.show();
}
}
@@ -215,24 +324,24 @@
}
if (maxSamplePosition == -1 || maxSamplePosition == maxSamplePositionFound) {
- occupancyMap.get((HpsSiSensor) rawHit.getDetectorElement())[rawHit.getIdentifierFieldValue("strip")]++;
+ occupancyMap.get(((HpsSiSensor) rawHit.getDetectorElement()).getName())[rawHit.getIdentifierFieldValue("strip")]++;
}
}
// Plot strip occupancies.
if (eventCount % eventRefreshRate == 0) {
for (HpsSiSensor sensor : sensors) {
- int[] strips = occupancyMap.get(sensor);
- occupancyPlots.get(sensor).reset();
- if (enablePositionPlots) occupancyVPositionPlots.get(sensor).reset();
+ int[] strips = occupancyMap.get(sensor.getName());
+ occupancyPlots.get(sensor.getName()).reset();
+ if (enablePositionPlots) positionPlots.get(sensor.getName()).reset();
for (int channel = 0; channel < strips.length; channel++) {
double stripOccupancy = (double) strips[channel] / (double) eventCount;
stripOccupancy /= this.timeWindowWeight;
- occupancyPlots.get(sensor).fill(channel, stripOccupancy);
+ occupancyPlots.get(sensor.getName()).fill(channel, stripOccupancy);
if (enablePositionPlots) {
double stripPosition = this.getStripPosition(sensor, channel).y();
- occupancyVPositionPlots.get(sensor).fill(stripPosition, stripOccupancy);
+ positionPlots.get(sensor.getName()).fill(stripPosition, stripOccupancy);
}
}
}
@@ -251,52 +360,4 @@
e.printStackTrace();
}
}
-
- /**
- * .
- */
- private Hep3Vector getStripPosition(HpsSiSensor sensor, int physicalChannel){
- return stripPositions.get(sensor).get(physicalChannel);
- }
-
- IPlotterStyle createOccupancyPlotStyle(String xAxisTitle, HpsSiSensor sensor) {
- // Create a default style
- IPlotterStyle style = this.plotterFactory.createPlotterStyle();
-
- // Set the style of the X axis
- style.xAxisStyle().setLabel(xAxisTitle);
- style.xAxisStyle().labelStyle().setFontSize(14);
- style.xAxisStyle().setVisible(true);
-
- // Set the style of the Y axis
- style.yAxisStyle().setLabel("Occupancy");
- style.yAxisStyle().labelStyle().setFontSize(14);
- style.yAxisStyle().setVisible(true);
-
- // Turn off the histogram grid
- style.gridStyle().setVisible(false);
-
- // Set the style of the data
- style.dataStyle().lineStyle().setVisible(false);
- style.dataStyle().outlineStyle().setVisible(true);
- style.dataStyle().outlineStyle().setThickness(3);
- style.dataStyle().fillStyle().setVisible(true);
- style.dataStyle().fillStyle().setOpacity(.10);
- if (sensor.isTopLayer()) {
- style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
- style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
- } else {
- style.dataStyle().fillStyle().setColor("93, 228, 47, 1");
- style.dataStyle().outlineStyle().setColor("93, 228, 47, 1");
- }
- style.dataStyle().errorBarStyle().setVisible(false);
-
- // Turn off the legend
- style.legendBoxStyle().setVisible(false);
-
- style.regionBoxStyle().backgroundStyle().setOpacity(.10);
- if (sensor.isAxial()) style.regionBoxStyle().backgroundStyle().setColor("229, 114, 31, 1");
-
- return style;
- }
}
|