Author: [log in to unmask]
Date: Fri May 8 21:10:53 2015
New Revision: 2930
Log:
display pedestal plots, pull some utility methods out into a new class
Added:
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/PedestalPlots.java
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/SvtHitPlots.java
Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java
=============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java (original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/PedestalPlots.java Fri May 8 21:10:53 2015
@@ -1,11 +1,19 @@
package org.hps.monitoring.drivers.svt;
+import hep.aida.IAnalysisFactory;
import hep.aida.IDataPoint;
import hep.aida.IDataPointSet;
import hep.aida.IFitResult;
import hep.aida.IFitter;
import hep.aida.IHistogram1D;
import hep.aida.IHistogram2D;
+import hep.aida.IHistogramFactory;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterStyle;
+import hep.aida.ITree;
+import hep.aida.jfree.plotter.Plotter;
+import hep.aida.jfree.plotter.PlotterRegion;
import hep.aida.ref.histogram.DataPoint;
import java.io.FileNotFoundException;
@@ -15,7 +23,6 @@
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-
//===> import org.hps.conditions.deprecated.HPSSVTCalibrationConstants;
//===> import org.hps.conditions.deprecated.SvtUtils;
@@ -33,18 +40,34 @@
*/
public class PedestalPlots extends Driver {
+ static {
+ hep.aida.jfree.AnalysisFactory.register();
+ }
+
+ // Plotting
+ private static ITree tree = null;
+ private IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory();
+ private IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory("SVT Pedestals");
+ private IHistogramFactory histogramFactory = null;
+
+ // Histogram maps
+ private static Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
+ private static Map<String, IHistogram1D> occupancyPlots = new HashMap<String, IHistogram1D>();
+
private AIDA aida = AIDA.defaultInstance();
- private Map<SiSensor, IHistogram2D> hists;
- private Map<SiSensor, int[]> counts;
- private Map<SiSensor, double[]> means;
- private Map<SiSensor, double[]> sumsqs;
- private Map<SiSensor, IDataPointSet[]> plots;
+ List<HpsSiSensor> sensors;
+ private Map<HpsSiSensor, IHistogram2D> hists;
+ private Map<HpsSiSensor, int[]> counts;
+ private Map<HpsSiSensor, double[]> means;
+ private Map<HpsSiSensor, double[]> sumsqs;
+ private Map<HpsSiSensor, IDataPointSet[]> plots;
private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
private String fitFile = null;
private boolean plotTimeSeries = false;
private static final String subdetectorName = "Tracker";
-
-
+ private int eventCount = 0;
+ private int eventRefreshRate = 1;
+
public void setFitFile(String fitFile) {
this.fitFile = fitFile;
}
@@ -53,22 +76,31 @@
this.plotTimeSeries = plotTimeSeries;
}
+ public void setEventRefreshRate(int eventRefreshRate) {
+ this.eventRefreshRate = eventRefreshRate;
+ }
+
@Override
protected void detectorChanged(Detector detector) {
aida.tree().cd("/");
- hists = new HashMap<SiSensor, IHistogram2D>();
- counts = new HashMap<SiSensor, int[]>();
- means = new HashMap<SiSensor, double[]>();
- sumsqs = new HashMap<SiSensor, double[]>();
- plots = new HashMap<SiSensor, IDataPointSet[]>();
-
- List<SiSensor> sensors = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(SiSensor.class);
-
+ hists = new HashMap<HpsSiSensor, IHistogram2D>();
+ counts = new HashMap<HpsSiSensor, int[]>();
+ means = new HashMap<HpsSiSensor, double[]>();
+ sumsqs = new HashMap<HpsSiSensor, double[]>();
+ plots = new HashMap<HpsSiSensor, IDataPointSet[]>();
+
+ sensors = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(HpsSiSensor.class);
+
+ plotters.put("Pedestal vs. channel", plotterFactory.create("Pedestal vs. channel"));
+ plotters.get("Pedestal vs. channel").createRegions(6, 6);
+
//===> for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
- for (SiSensor sensor : sensors) {
- hists.put(sensor, aida.histogram2D(sensor.getName() + " sample 1 vs. ch", 640, -0.5, 639.5, 500, -500.0, 3000.0));
+ for (HpsSiSensor sensor : sensors) {
+ hists.put(sensor, aida.histogram2D(sensor.getName() + " sample 1 vs. ch", 640, -0.5, 639.5, 100, -500.0, 500.0));
+ plotters.get("Pedestal vs. channel").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists.get(sensor), this.createStyle(sensor, "Channel", "Sample 1"));
+
if (plotTimeSeries) {
counts.put(sensor, new int[640]);
means.put(sensor, new double[640]);
@@ -81,8 +113,30 @@
}
}
-
-
+ for (IPlotter plotter : plotters.values()) {
+ for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) {
+ PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN));
+ if (region.getPlottedObjects().isEmpty()) {
+ continue;
+ }
+ region.getPanel().addMouseListener(new PopupPlotterListener(region));
+ }
+ plotter.show();
+ }
+ }
+
+ IPlotterStyle createStyle(HpsSiSensor sensor, String xAxisTitle, String yAxisTitle) {
+ IPlotterStyle style = SvtPlotUtils.createStyle(plotterFactory, xAxisTitle, yAxisTitle);
+
+ 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");
+ }
+
+ return style;
}
@Override
@@ -90,6 +144,7 @@
if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
// Get RawTrackerHit collection from event.
List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+ eventCount++;
for (RawTrackerHit hit : rawTrackerHits) {
HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
@@ -115,10 +170,52 @@
sumsqs.get(sensor)[strip] = 0;
}
}
- }
- }
- }
-
+
+ }
+// if (eventCount % eventRefreshRate == 0) {
+// for (HpsSiSensor sensor : sensors) {
+// IHistogram2D hist = hists.get(sensor);
+//// hist.
+// }
+// }
+
+ }
+ }
+
+// private void getMean2D(IHistogram2D hist2D) {
+// int nx = hist2D.xAxis().bins();
+// int ny = hist2D.yAxis().bins();
+// double[][] means = new double[nx][ny];
+// for (int ix = 0; ix < nx; ix++) {
+// for (int iy = 0; iy < ny; iy++) {
+// means[ix][iy] = hist2D.binHeight(ix, iy) / hist2D.binEntries(ix, iy);
+// }
+// }
+// hist2D.reset();
+// for (int ix = 0; ix < nx; ix++) {
+// for (int iy = 0; iy < ny; iy++) {
+// double x = hist2D.xAxis().binCenter(ix);
+// double y = hist2D.yAxis().binCenter(iy);
+// hist2D.fill(x, y, means[ix][iy]);
+// }
+// }
+//
+// IFitter fitter = AIDA.defaultInstance().analysisFactory().createFitFactory().createFitter("chi2");
+//
+// }
+//
+// IFitResult fitGaussian(IHistogram1D h1d, IFitter fitter, String range) {
+// double[] init = {h1d.maxBinHeight(), h1d.mean(), h1d.rms()};
+// IFitResult ifr = null;
+// try {
+// ifr = fitter.fit(h1d, "g", init, range);
+// } catch (RuntimeException ex) {
+// System.out.println(this.getClass().getSimpleName() + ": caught exception in fitGaussian");
+// }
+// return ifr;
+//// double[] init = {20.0, 0.0, 1.0, 20, -1};
+//// return fitter.fit(h1d, "g+p1", init, range);
+// }
@Override
public void endOfData() {
if (fitFile == null) {
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 8 21:10:53 2015
@@ -1,5 +1,4 @@
package org.hps.monitoring.drivers.svt;
-
import java.io.IOException;
import java.util.HashMap;
@@ -34,16 +33,16 @@
/**
* This Driver makes plots of SVT sensor occupancies across a run.
- *
+ *
* @author Omar Moreno <[log in to unmask]>
*/
public class SensorOccupancyPlotsDriver extends Driver {
// TODO: Add documentation
- static {
+ static {
hep.aida.jfree.AnalysisFactory.register();
- }
-
+ }
+
// Plotting
private static ITree tree = null;
private IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory();
@@ -55,23 +54,23 @@
private static Map<String, IHistogram1D> occupancyPlots = new HashMap<String, IHistogram1D>();
private static Map<String, IHistogram1D> positionPlots = new HashMap<String, IHistogram1D>();
private static Map<String, int[]> occupancyMap = new HashMap<String, int[]>();
- private static Map<String, IHistogram1D> maxSamplePositionPlots = new HashMap<String, IHistogram1D>();
+ private static Map<String, IHistogram1D> maxSamplePositionPlots = new HashMap<String, IHistogram1D>();
private List<HpsSiSensor> sensors;
- private Map<HpsSiSensor, Map<Integer, Hep3Vector>> stripPositions = new HashMap<HpsSiSensor, Map<Integer, Hep3Vector>>();
+ private Map<HpsSiSensor, Map<Integer, Hep3Vector>> stripPositions = new HashMap<HpsSiSensor, Map<Integer, Hep3Vector>>();
private static final String SUBDETECTOR_NAME = "Tracker";
private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
- private String triggerBankCollectionName = "TriggerBank";
-
+ private String triggerBankCollectionName = "TriggerBank";
+
String rootFile = null;
private int maxSamplePosition = -1;
- private int timeWindowWeight = 1;
+ private int timeWindowWeight = 1;
private int eventCount = 0;
private int eventRefreshRate = 1;
private int runNumber = -1;
-
+
private boolean enablePositionPlots = false;
private boolean enableMaxSamplePlots = false;
private boolean enableTriggerFilter = false;
@@ -80,7 +79,7 @@
private boolean filterSingle1Triggers = false;
private boolean filterPair0Triggers = false;
private boolean filterPair1Triggers = false;
-
+
public SensorOccupancyPlotsDriver() {
}
@@ -91,195 +90,172 @@
public void setEventRefreshRate(int eventRefreshRate) {
this.eventRefreshRate = eventRefreshRate;
}
-
- public void setEnablePositionPlots(boolean enablePositionPlots) {
- this.enablePositionPlots = enablePositionPlots;
- }
-
- public void setEnableMaxSamplePlots(boolean enableMaxSamplePlots) {
+
+ public void setEnablePositionPlots(boolean enablePositionPlots) {
+ this.enablePositionPlots = enablePositionPlots;
+ }
+
+ public void setEnableMaxSamplePlots(boolean enableMaxSamplePlots) {
this.enableMaxSamplePlots = enableMaxSamplePlots;
}
-
- public void setEnableTriggerFilter(boolean enableTriggerFilter) {
+
+ public void setEnableTriggerFilter(boolean enableTriggerFilter) {
this.enableTriggerFilter = enableTriggerFilter;
}
-
- public void setFilterPulserTriggers(boolean filterPulserTriggers) {
+
+ public void setFilterPulserTriggers(boolean filterPulserTriggers) {
this.filterPulserTriggers = filterPulserTriggers;
}
- public void setFilterSingle0Triggers(boolean filterSingle0Triggers) {
+ public void setFilterSingle0Triggers(boolean filterSingle0Triggers) {
this.filterSingle0Triggers = filterSingle0Triggers;
}
-
- public void setFilterSingle1Triggers(boolean filterSingle1Triggers) {
+
+ public void setFilterSingle1Triggers(boolean filterSingle1Triggers) {
this.filterSingle1Triggers = filterSingle1Triggers;
}
- public void setFilterPair0Triggers(boolean filterPair0Triggers) {
+ public void setFilterPair0Triggers(boolean filterPair0Triggers) {
this.filterPair0Triggers = filterPair0Triggers;
}
- public void setFilterPair1Triggers(boolean filterPair1Triggers) {
+ public void setFilterPair1Triggers(boolean filterPair1Triggers) {
this.filterPair1Triggers = filterPair1Triggers;
}
- public void setMaxSamplePosition(int maxSamplePosition) {
+ public void setMaxSamplePosition(int maxSamplePosition) {
this.maxSamplePosition = maxSamplePosition;
}
-
- public void setTimeWindowWeight(int timeWindowWeight) {
- this.timeWindowWeight = timeWindowWeight;
- }
-
- private int computePlotterRegion(HpsSiSensor sensor) {
-
- if (sensor.getLayerNumber() < 7) {
- if (sensor.isTopLayer()) {
- return 6 * (sensor.getLayerNumber() - 1);
- } else {
- return 6 * (sensor.getLayerNumber() - 1) + 1;
- }
- } else {
-
- if (sensor.isTopLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6 * (sensor.getLayerNumber() - 7) + 2;
- } else {
- return 6 * (sensor.getLayerNumber() - 7) + 3;
- }
- } else if (sensor.isBottomLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6 * (sensor.getLayerNumber() - 7) + 4;
- } else {
- return 6 * (sensor.getLayerNumber() - 7) + 5;
- }
- }
- }
-
- return -1;
+
+ public void setTimeWindowWeight(int timeWindowWeight) {
+ this.timeWindowWeight = timeWindowWeight;
}
/**
- * 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
+ * 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){
+ 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.
+ * 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)){
- stripPositions.put(sensor, new HashMap<Integer, Hep3Vector>());
- SiStrips strips = (SiStrips) sensor.getReadoutElectrodes(carrier);
- ITransform3D parentToLocal = sensor.getReadoutElectrodes(carrier).getParentToLocal();
- ITransform3D localToGlobal = sensor.getReadoutElectrodes(carrier).getLocalToGlobal();
- for(int physicalChannel = 0; physicalChannel < 640; physicalChannel++){
- Hep3Vector localStripPosition = strips.getCellPosition(physicalChannel);
- Hep3Vector stripPosition = parentToLocal.transformed(localStripPosition);
- Hep3Vector globalStripPosition = localToGlobal.transformed(stripPosition);
- stripPositions.get(sensor).put(physicalChannel, globalStripPosition);
- }
- }
- }
- }
+ private void createStripPositionMap() {
+ for (HpsSiSensor sensor : sensors) {
+ stripPositions.put(sensor, createStripPositionMap(sensor));
+ }
+ }
+
+ public static Map<Integer, Hep3Vector> createStripPositionMap(HpsSiSensor sensor) {
+ Map<Integer, Hep3Vector> positionMap = new HashMap<Integer, Hep3Vector>();
+ for (ChargeCarrier carrier : ChargeCarrier.values()) {
+ if (sensor.hasElectrodesOnSide(carrier)) {
+ SiStrips strips = (SiStrips) sensor.getReadoutElectrodes(carrier);
+ ITransform3D parentToLocal = sensor.getReadoutElectrodes(carrier).getParentToLocal();
+ ITransform3D localToGlobal = sensor.getReadoutElectrodes(carrier).getLocalToGlobal();
+ for (int physicalChannel = 0; physicalChannel < 640; physicalChannel++) {
+ Hep3Vector localStripPosition = strips.getCellPosition(physicalChannel);
+ Hep3Vector stripPosition = parentToLocal.transformed(localStripPosition);
+ Hep3Vector globalStripPosition = localToGlobal.transformed(stripPosition);
+ positionMap.put(physicalChannel, globalStripPosition);
+ }
+ }
+ }
+ return positionMap;
}
/**
- * Create a plotter style.
- *
+ * 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.
+ * @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(false);
style.dataStyle().outlineStyle().setThickness(3);
style.dataStyle().fillStyle().setVisible(true);
style.dataStyle().fillStyle().setOpacity(.30);
- if (sensor.isTopLayer()) {
+ if (sensor.isTopLayer()) {
style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
- } else {
+ } 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(.20);
- if (sensor.isAxial()) style.regionBoxStyle().backgroundStyle().setColor("246, 246, 34, 1");
-
+ if (sensor.isAxial()) {
+ style.regionBoxStyle().backgroundStyle().setColor("246, 246, 34, 1");
+ }
+
return style;
}
/**
- * Clear all histograms of it's current data.
+ * Clear all histograms of it's current data.
*/
- private void resetPlots() {
-
+ 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) {
+ for (HpsSiSensor sensor : sensors) {
// Clear the occupancy plots.
occupancyPlots.get(sensor.getName()).reset();
-
- if (enablePositionPlots) {
+
+ if (enablePositionPlots) {
positionPlots.get(sensor.getName()).reset();
}
-
- if (enableMaxSamplePlots) {
+
+ if (enableMaxSamplePlots) {
maxSamplePositionPlots.get(sensor.getName()).reset();
}
-
+
// Reset the hit counters.
occupancyMap.put(sensor.getName(), new int[640]);
}
}
-
- private int getLayerNumber(HpsSiSensor sensor) {
- return (int) Math.ceil(((double) sensor.getLayerNumber())/2);
- }
-
+
+ private static int getLayerNumber(HpsSiSensor sensor) {
+ return (int) Math.ceil(((double) sensor.getLayerNumber()) / 2);
+ }
+
protected void detectorChanged(Detector detector) {
// Get the HpsSiSensor objects from the geometry
@@ -289,18 +265,17 @@
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);
@@ -309,124 +284,132 @@
plotters.put("Occupancy", plotterFactory.create("Occupancy"));
plotters.get("Occupancy").createRegions(6, 6);
- if (enablePositionPlots) {
+ if (enablePositionPlots) {
plotters.put("Occupancy vs Position", plotterFactory.create("Occupancy vs Position"));
plotters.get("Occupancy vs Position").createRegions(6, 6);
}
-
- if (enableMaxSamplePlots) {
+
+ if (enableMaxSamplePlots) {
plotters.put("Max Sample Number", plotterFactory.create("Max Sample Number"));
plotters.get("Max Sample Number").createRegions(6, 6);
}
-
+
for (HpsSiSensor sensor : sensors) {
occupancyPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy", 640, 0, 640));
- plotters.get("Occupancy").region(this.computePlotterRegion(sensor))
- .plot(occupancyPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Physical Channel", sensor));
-
+ plotters.get("Occupancy").region(SvtPlotUtils.computePlotterRegion(sensor))
+ .plot(occupancyPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Physical Channel", sensor));
+
if (enablePositionPlots) {
if (sensor.isTopLayer()) {
- positionPlots.put(sensor.getName(),
+ positionPlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy vs Position", 1000, 0, 60));
- } else {
- positionPlots.put(sensor.getName(),
+ } else {
+ positionPlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - Occupancy vs Position", 1000, -60, 0));
}
-
- plotters.get("Occupancy vs Position").region(this.computePlotterRegion(sensor))
- .plot(positionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor));
+
+ plotters.get("Occupancy vs Position").region(SvtPlotUtils.computePlotterRegion(sensor))
+ .plot(positionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor));
}
occupancyMap.put(sensor.getName(), new int[640]);
-
- if (enableMaxSamplePlots) {
+
+ if (enableMaxSamplePlots) {
maxSamplePositionPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - Max Sample Number", 6, 0, 6));
- plotters.get("Max Sample Number").region(this.computePlotterRegion(sensor))
- .plot(maxSamplePositionPlots.get(sensor.getName()),
- this.createOccupancyPlotStyle("Max Sample Number", sensor));
- }
- }
-
+ plotters.get("Max Sample Number").region(SvtPlotUtils.computePlotterRegion(sensor))
+ .plot(maxSamplePositionPlots.get(sensor.getName()),
+ this.createOccupancyPlotStyle("Max Sample Number", sensor));
+ }
+ }
+
for (IPlotter plotter : plotters.values()) {
- for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) {
+ for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) {
PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN));
- if (region.getPlottedObjects().size() == 0) continue;
+ if (region.getPlottedObjects().size() == 0) {
+ continue;
+ }
region.getPanel().addMouseListener(new PopupPlotterListener(region));
}
plotter.show();
}
}
- private boolean passTriggerFilter(List<GenericObject> triggerBanks) {
-
+ private boolean passTriggerFilter(List<GenericObject> triggerBanks) {
+
// Loop through the collection of banks and get the TI banks.
- for (GenericObject triggerBank : triggerBanks) {
-
- // If the bank contains TI data, process it
- if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
-
- TIData tiData = new TIData(triggerBank);
-
- if (filterPulserTriggers && tiData.isPulserTrigger()) {
- return false;
- } else if (filterSingle0Triggers && tiData.isSingle0Trigger()) {
- return false;
- } else if (filterSingle1Triggers && tiData.isSingle1Trigger()) {
- return false;
- } else if (filterPair0Triggers && tiData.isPair0Trigger()) {
- return false;
- } else if (filterPair1Triggers && tiData.isPair1Trigger()) {
- return false;
- }
- }
- }
- return true;
- }
-
+ for (GenericObject triggerBank : triggerBanks) {
+
+ // If the bank contains TI data, process it
+ if (AbstractIntData.getTag(triggerBank) == TIData.BANK_TAG) {
+
+ TIData tiData = new TIData(triggerBank);
+
+ if (filterPulserTriggers && tiData.isPulserTrigger()) {
+ return false;
+ } else if (filterSingle0Triggers && tiData.isSingle0Trigger()) {
+ return false;
+ } else if (filterSingle1Triggers && tiData.isSingle1Trigger()) {
+ return false;
+ } else if (filterPair0Triggers && tiData.isPair0Trigger()) {
+ return false;
+ } else if (filterPair1Triggers && tiData.isPair1Trigger()) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
public void process(EventHeader event) {
-
+
// Get the run number from the event and store it. This will be used
// when writing the plots out to a ROOT file
- if (runNumber == -1) runNumber = event.getRunNumber();
-
- if (enableTriggerFilter && event.hasCollection(GenericObject.class, triggerBankCollectionName)) {
-
- // Get the list of trigger banks from the event
- List<GenericObject> triggerBanks = event.get(GenericObject.class, triggerBankCollectionName);
-
- // Apply the trigger filter
- if (!passTriggerFilter(triggerBanks)) return;
- }
-
+ if (runNumber == -1) {
+ runNumber = event.getRunNumber();
+ }
+
+ if (enableTriggerFilter && event.hasCollection(GenericObject.class, triggerBankCollectionName)) {
+
+ // Get the list of trigger banks from the event
+ List<GenericObject> triggerBanks = event.get(GenericObject.class, triggerBankCollectionName);
+
+ // Apply the trigger filter
+ if (!passTriggerFilter(triggerBanks)) {
+ return;
+ }
+ }
+
// If the event doesn't have a collection of RawTrackerHit's, skip it.
- if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) return;
+ if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
+ return;
+ }
// Get RawTrackerHit collection from event.
List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
eventCount++;
// Increment strip hit count.
for (RawTrackerHit rawHit : rawHits) {
-
+
// Obtain the raw ADC samples for each of the six samples readout
short[] adcValues = rawHit.getADCValues();
-
+
// Find the sample that has the largest amplitude. This should
// correspond to the peak of the shaper signal if the SVT is timed
// in correctly. Otherwise, the maximum sample value will default
// to 0.
int maxAmplitude = 0;
int maxSamplePositionFound = -1;
- for (int sampleN = 0; sampleN < 6; sampleN++) {
- if (adcValues[sampleN] > maxAmplitude) {
+ for (int sampleN = 0; sampleN < 6; sampleN++) {
+ if (adcValues[sampleN] > maxAmplitude) {
maxAmplitude = adcValues[sampleN];
- maxSamplePositionFound = sampleN;
- }
- }
-
- if (maxSamplePosition == -1 || maxSamplePosition == maxSamplePositionFound) {
+ maxSamplePositionFound = sampleN;
+ }
+ }
+
+ if (maxSamplePosition == -1 || maxSamplePosition == maxSamplePositionFound) {
occupancyMap.get(((HpsSiSensor) rawHit.getDetectorElement()).getName())[rawHit.getIdentifierFieldValue("strip")]++;
}
-
- if (enableMaxSamplePlots) {
+
+ if (enableMaxSamplePlots) {
maxSamplePositionPlots.get(((HpsSiSensor) rawHit.getDetectorElement()).getName()).fill(maxSamplePositionFound);
}
}
@@ -436,12 +419,14 @@
for (HpsSiSensor sensor : sensors) {
int[] strips = occupancyMap.get(sensor.getName());
occupancyPlots.get(sensor.getName()).reset();
- if (enablePositionPlots) positionPlots.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.getName()).fill(channel, stripOccupancy);
-
+
if (enablePositionPlots) {
double stripPosition = this.getStripPosition(sensor, channel).y();
positionPlots.get(sensor.getName()).fill(stripPosition, stripOccupancy);
@@ -450,46 +435,46 @@
}
}
}
-
- public void endOfData() {
-
+
+ public void endOfData() {
+
rootFile = "run" + runNumber + "_occupancy.root";
RootFileStore store = new RootFileStore(rootFile);
try {
store.open();
store.add(tree);
- store.close();
+ store.close();
} catch (IOException e) {
e.printStackTrace();
}
-
+
System.out.println("%===============================================================================%");
System.out.println("%======================== Active Edge Sensor Occupancies =======================%");
System.out.println("%===============================================================================%");
System.out.println("% Total Events: " + eventCount);
// Calculate the occupancies at the sensor edge
- int[] topActiveEdgeStripOccupancy = new int[6];
+ int[] topActiveEdgeStripOccupancy = new int[6];
int[] bottomActiveEdgeStripOccupancy = new int[6];
for (HpsSiSensor sensor : sensors) {
if (sensor.isTopLayer() && sensor.isAxial()) {
if (sensor.getSide() == sensor.ELECTRON_SIDE) {
System.out.println("% Top Layer " + this.getLayerNumber(sensor) + " Hit Counts: " + occupancyMap.get(sensor.getName())[1]);
topActiveEdgeStripOccupancy[this.getLayerNumber(sensor) - 1] += occupancyMap.get(sensor.getName())[1];
- } else {
+ } else {
System.out.println("% Top Layer " + this.getLayerNumber(sensor) + " Hit Counts: " + occupancyMap.get(sensor.getName())[638]);
topActiveEdgeStripOccupancy[this.getLayerNumber(sensor) - 1] += occupancyMap.get(sensor.getName())[638];
}
} else if (sensor.isBottomLayer() && sensor.isAxial()) {
- if (sensor.getSide() == sensor.ELECTRON_SIDE) {
+ if (sensor.getSide() == sensor.ELECTRON_SIDE) {
System.out.println("% Bottom Layer " + this.getLayerNumber(sensor) + " Hit Counts: " + occupancyMap.get(sensor.getName())[1]);
bottomActiveEdgeStripOccupancy[this.getLayerNumber(sensor) - 1] += occupancyMap.get(sensor.getName())[1];
- } else {
+ } else {
System.out.println("% Bottom Layer " + this.getLayerNumber(sensor) + " Hit Counts: " + occupancyMap.get(sensor.getName())[638]);
bottomActiveEdgeStripOccupancy[this.getLayerNumber(sensor) - 1] += occupancyMap.get(sensor.getName())[638];
}
}
}
-
+
for (int layerN = 0; layerN < 6; layerN++) {
double topStripOccupancy = (double) topActiveEdgeStripOccupancy[layerN] / (double) eventCount;
topStripOccupancy /= this.timeWindowWeight;
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 8 21:10:53 2015
@@ -84,48 +84,6 @@
}
}
return -1;
- }
-
- /**
- * Create a plotter style.
- *
- * @param xAxisTitle : Title of the x axis
- * @param yAxisTitle : Title of the y axis
- * @return plotter style
- */
- // TODO: Move this to a utilities class
- IPlotterStyle createStyle(String xAxisTitle, String yAxisTitle) {
-
- // 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(yAxisTitle);
- 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(false);
- style.dataStyle().outlineStyle().setThickness(3);
- style.dataStyle().fillStyle().setVisible(true);
- style.dataStyle().fillStyle().setOpacity(.30);
- style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
- style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
- style.dataStyle().errorBarStyle().setVisible(false);
-
- // Turn off the legend
- style.legendBoxStyle().setVisible(false);
-
- return style;
}
/**
@@ -139,7 +97,7 @@
*/
// TODO: Move this to a utilities class
IPlotterStyle createStyle(HpsSiSensor sensor, String xAxisTitle, String yAxisTitle) {
- IPlotterStyle style = this.createStyle(xAxisTitle, yAxisTitle);
+ IPlotterStyle style = SvtPlotUtils.createStyle(plotterFactory, xAxisTitle, yAxisTitle);
if (sensor.isTopLayer()) {
style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
@@ -198,7 +156,6 @@
// this.resetPlots();
// return;
// }
-
tree = analysisFactory.createTreeFactory().create();
histogramFactory = analysisFactory.createHistogramFactory(tree);
@@ -208,7 +165,7 @@
for (HpsSiSensor sensor : sensors) {
hitsPerSensorPlots.put(sensor.getName(),
histogramFactory.createHistogram1D(sensor.getName() + " - Raw Hits", 25, 0, 25));
- plotters.get("Raw hits per sensor").region(this.computePlotterRegion(sensor))
+ plotters.get("Raw hits per sensor").region(SvtPlotUtils.computePlotterRegion(sensor))
.plot(hitsPerSensorPlots.get(sensor.getName()), this.createStyle(sensor, "Number of Raw Hits", ""));
hitsPerSensor.put(sensor.getName(), new int[1]);
}
@@ -218,23 +175,23 @@
layersHitPlots.put("Top",
histogramFactory.createHistogram1D("Top Layers Hit", 12, 0, 12));
- plotters.get("Number of layers hit").region(0).plot(layersHitPlots.get("Top"), this.createStyle("Number of Top Layers Hit", ""));
+ plotters.get("Number of layers hit").region(0).plot(layersHitPlots.get("Top"), SvtPlotUtils.createStyle(plotterFactory, "Number of Top Layers Hit", ""));
layersHitPlots.put("Bottom",
histogramFactory.createHistogram1D("Bottom Layers Hit", 12, 0, 12));
- plotters.get("Number of layers hit").region(1).plot(layersHitPlots.get("Bottom"), this.createStyle("Number of Bottom Layers Hit", ""));
+ plotters.get("Number of layers hit").region(1).plot(layersHitPlots.get("Bottom"), SvtPlotUtils.createStyle(plotterFactory, "Number of Bottom Layers Hit", ""));
plotters.put("Raw hit counts/Event", plotterFactory.create("Raw hit counts/Event"));
plotters.get("Raw hit counts/Event").createRegions(2, 2);
hitCountPlots.put("Raw hit counts/Event",
histogramFactory.createHistogram1D("Raw hit counts", 100, 0, 100));
- plotters.get("Raw hit counts/Event").region(0).plot(hitCountPlots.get("Raw hit counts/Event"), this.createStyle("Number of Raw Hits", ""));
+ plotters.get("Raw hit counts/Event").region(0).plot(hitCountPlots.get("Raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Hits", ""));
hitCountPlots.put("SVT top raw hit counts/Event",
histogramFactory.createHistogram1D("SVT top raw hit counts", 100, 0, 100));
- plotters.get("Raw hit counts/Event").region(1).plot(hitCountPlots.get("SVT top raw hit counts/Event"), this.createStyle("Number of Raw Hits in Top Volume", ""));
+ plotters.get("Raw hit counts/Event").region(2).plot(hitCountPlots.get("SVT top raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Hits in Top Volume", ""));
hitCountPlots.put("SVT bottom raw hit counts/Event",
histogramFactory.createHistogram1D("SVT bottom raw hit counts", 100, 0, 100));
- plotters.get("Raw hit counts/Event").region(3).plot(hitCountPlots.get("SVT bottom raw hit counts/Event"), this.createStyle("Number of Raw Bits in the Bottom Volume", ""));
+ plotters.get("Raw hit counts/Event").region(3).plot(hitCountPlots.get("SVT bottom raw hit counts/Event"), SvtPlotUtils.createStyle(plotterFactory, "Number of Raw Bits in the Bottom Volume", ""));
plotters.put("First sample distributions (pedestal shifts)", plotterFactory.create("First sample distributions (pedestal shifts)"));
plotters.get("First sample distributions (pedestal shifts)").createRegions(6, 6);
Added: 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 (added)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtPlotUtils.java Fri May 8 21:10:53 2015
@@ -0,0 +1,82 @@
+package org.hps.monitoring.drivers.svt;
+
+import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterStyle;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+
+/**
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ */
+public class SvtPlotUtils {
+
+ public static int computePlotterRegion(HpsSiSensor sensor) {
+
+ if (sensor.getLayerNumber() < 7) {
+ if (sensor.isTopLayer()) {
+ return 6 * (sensor.getLayerNumber() - 1);
+ } else {
+ return 6 * (sensor.getLayerNumber() - 1) + 1;
+ }
+ } else {
+
+ if (sensor.isTopLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6 * (sensor.getLayerNumber() - 7) + 2;
+ } else {
+ return 6 * (sensor.getLayerNumber() - 7) + 3;
+ }
+ } else if (sensor.isBottomLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6 * (sensor.getLayerNumber() - 7) + 4;
+ } else {
+ return 6 * (sensor.getLayerNumber() - 7) + 5;
+ }
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Create a plotter style.
+ *
+ * @param xAxisTitle : Title of the x axis
+ * @param yAxisTitle : Title of the y axis
+ * @return plotter style
+ */
+ // TODO: Move this to a utilities class
+ public static IPlotterStyle createStyle(IPlotterFactory plotterFactory, String xAxisTitle, String yAxisTitle) {
+
+ // Create a default style
+ IPlotterStyle style = 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(yAxisTitle);
+ 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(false);
+ style.dataStyle().outlineStyle().setThickness(3);
+ style.dataStyle().fillStyle().setVisible(true);
+ style.dataStyle().fillStyle().setOpacity(.30);
+ style.dataStyle().fillStyle().setColor("31, 137, 229, 1");
+ style.dataStyle().outlineStyle().setColor("31, 137, 229, 1");
+ style.dataStyle().errorBarStyle().setVisible(false);
+
+ // Turn off the legend
+ style.legendBoxStyle().setVisible(false);
+
+ return style;
+ }
+}
|