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; + } +}