Author: [log in to unmask] Date: Tue Mar 1 18:20:12 2016 New Revision: 4275 Log: clean up monitoring plots Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTPulseFitPlots.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/SvtHitPlots.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTPulseFitPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTPulseFitPlots.java (added) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SVTPulseFitPlots.java Tue Mar 1 18:20:12 2016 @@ -0,0 +1,157 @@ +package org.hps.monitoring.drivers.svt; + +import hep.aida.IAnalysisFactory; +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 java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.hps.conditions.database.DatabaseConditionsManager; +import org.hps.conditions.svt.SvtTimingConstants; +import org.hps.readout.svt.HPSSVTConstants; +import static org.hps.readout.svt.HPSSVTConstants.SAMPLING_INTERVAL; +import org.hps.recon.tracking.FittedRawTrackerHit; +import org.hps.recon.tracking.SvtPlotUtils; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.event.EventHeader; +import org.lcsim.geometry.Detector; +import org.lcsim.recon.cat.util.Const; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +/** + * + * @author mgraham + */ +public class SVTPulseFitPlots extends Driver { + + static { + hep.aida.jfree.AnalysisFactory.register(); + } + + private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits"; + private static ITree tree = null; + private final IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory(); + private final IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory("SVT Pulse Fits"); + + private static final Map<String, IHistogram1D> t0Plots = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram1D> ampPlots = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram1D> chiprobPlots = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram2D> t0aPlots = new HashMap<String, IHistogram2D>(); + private static final Map<String, IHistogram2D> shapePlots = new HashMap<String, IHistogram2D>(); + + protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); + + private static final String subdetectorName = "Tracker"; + private SvtTimingConstants timingConstants; + + @Override + protected void detectorChanged(Detector detector) { + timingConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtTimingConstants.SvtTimingConstantsCollection.class, "svt_timing_constants").getCachedData().get(0); + + List<HpsSiSensor> sensors = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(HpsSiSensor.class); + + plotters.put("Timing", plotterFactory.create("Timing")); + plotters.get("Timing").createRegions(6, 6); + + plotters.put("Amplitude", plotterFactory.create("Amplitude")); + plotters.get("Amplitude").createRegions(6, 6); + + plotters.put("Chisq", plotterFactory.create("Chisq")); + plotters.get("Chisq").createRegions(6, 6); + + plotters.put("A vs. T0", plotterFactory.create("A vs. T0")); + plotters.get("A vs. T0").createRegions(6, 6); + + plotters.put("Pulse shape", plotterFactory.create("Pulse shape")); + plotters.get("Pulse shape").createRegions(6, 6); + + tree = analysisFactory.createTreeFactory().create(); + IHistogramFactory histogramFactory = analysisFactory.createHistogramFactory(tree); + + // Setup the occupancy plots. + for (HpsSiSensor sensor : sensors) { + + t0Plots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + "_timing", 50, -100, 100.0)); + plotters.get("Timing").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(t0Plots.get(sensor.getName()), this.createStyle(sensor, "Hit time [ns]", "")); + ampPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + "_amplitude", 50, 0, 2000.0)); + plotters.get("Amplitude").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(ampPlots.get(sensor.getName()), this.createStyle(sensor, "Hit amplitude [ADC]", "")); + chiprobPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + "_chiprob", 100, 0, 1.0)); + plotters.get("Chisq").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(chiprobPlots.get(sensor.getName()), this.createStyle(sensor, "Chisq probability", "")); + t0aPlots.put(sensor.getName(), histogramFactory.createHistogram2D(sensor.getName() + " A vs. T0", 100, -100, 100, 100, 0, 2000)); + plotters.get("A vs. T0").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(t0aPlots.get(sensor.getName()), this.createStyle(sensor, "Hit time [ns]", "Hit amplitude [ADC]")); + shapePlots.put(sensor.getName(), histogramFactory.createHistogram2D(sensor.getName() + " Shape", 200, -1 * SAMPLING_INTERVAL, 6 * SAMPLING_INTERVAL, 100, -0.5, 1.5)); + plotters.get("Pulse shape").region(SvtPlotUtils.computePlotterRegion(sensor)).plot(shapePlots.get(sensor.getName()), this.createStyle(sensor, "Time after hit [ns]", "Normalized amplitude")); + } + + 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; + } + + public SVTPulseFitPlots() { + } + + public void setFittedTrackerHitCollectionName(String fittedTrackerHitCollectionName) { + this.fittedTrackerHitCollectionName = fittedTrackerHitCollectionName; + } + + @Override + public void process(EventHeader event) { + List<FittedRawTrackerHit> fittedrawHits = event.get(FittedRawTrackerHit.class, fittedTrackerHitCollectionName); + for (FittedRawTrackerHit fit : fittedrawHits) { + HpsSiSensor sensor = (HpsSiSensor) fit.getRawTrackerHit().getDetectorElement(); + int strip = fit.getRawTrackerHit().getIdentifierFieldValue("strip"); + double fittedAmp = fit.getAmp(); + double fittedT0 = fit.getT0(); + + double tof = fit.getRawTrackerHit().getDetectorElement().getGeometry().getPosition().magnitude() / (Const.SPEED_OF_LIGHT * Const.nanosecond); + double offset = timingConstants.getOffsetTime() + + (((event.getTimeStamp() - 4 * timingConstants.getOffsetPhase()) % 24) - 12) + + sensor.getShapeFitParameters(strip)[HpsSiSensor.T0_INDEX] + + sensor.getT0Shift() + + tof; + + t0Plots.get(sensor.getName()).fill(fittedT0); + ampPlots.get(sensor.getName()).fill(fittedAmp); + chiprobPlots.get(sensor.getName()).fill(fit.getShapeFitParameters().getChiProb()); + + t0aPlots.get(sensor.getName()).fill(fit.getT0(), fit.getAmp()); + if (fit.getAmp() > 4 * sensor.getNoise(strip, 0)) { + for (int i = 0; i < fit.getRawTrackerHit().getADCValues().length; i++) { + shapePlots.get(sensor.getName()).fill((i * HPSSVTConstants.SAMPLING_INTERVAL - fit.getT0() - offset), + (fit.getRawTrackerHit().getADCValues()[i] - sensor.getPedestal(strip, i)) / fit.getAmp()); + } + } + } + } + +} 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 Tue Mar 1 18:20:12 2016 @@ -13,8 +13,8 @@ import hep.aida.IPlotterRegion; import hep.aida.IPlotterStyle; import hep.aida.ITree; -import hep.aida.ref.plotter.Plotter; -import hep.aida.ref.plotter.PlotterRegion; +import hep.aida.jfree.plotter.Plotter; +import hep.aida.jfree.plotter.PlotterRegion; import hep.aida.ref.rootwriter.RootFileStore; import hep.physics.vec.Hep3Vector; @@ -413,7 +413,7 @@ occupancyMap.put(sensor.getName(), new int[640]); if (enableMaxSamplePlots) { - maxSamplePositionPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - Max Sample Number", 6, 0, 6)); + maxSamplePositionPlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - Max Sample Number", 6, -0.5, 5.5)); plotters.get("Max Sample Number").region(SvtPlotUtils.computePlotterRegion(sensor)) .plot(maxSamplePositionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Max Sample Number", sensor, false)); @@ -422,12 +422,11 @@ for (IPlotter plotter : plotters.values()) { for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) { - //Plotter l; - //PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN)); - //if (region..getPlottedObjects().isEmpty()) { - // continue; - //} - //region.getPanel().addMouseListener(new PopupPlotterListener(region)); + PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN)); + if (region.getPlottedObjects().isEmpty()) { + continue; + } + region.getPanel().addMouseListener(new PopupPlotterListener(region)); } plotter.show(); } 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 Tue Mar 1 18:20:12 2016 @@ -31,7 +31,7 @@ * * @author Omar Moreno <[log in to unmask]> * @author Per Hansson Adrian <[log in to unmask]> - * + * */ public class SvtHitPlots extends Driver { @@ -42,25 +42,25 @@ // Plotting private static ITree tree = null; - private IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory(); - private IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory("SVT Hits"); + private final IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory(); + private final IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory("SVT Hits"); private IHistogramFactory histogramFactory = null; protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); // Histogram Maps - private static Map<String, IHistogram1D> hitsPerSensorPlots = new HashMap<String, IHistogram1D>(); - private static Map<String, int[]> hitsPerSensor = new HashMap<String, int[]>(); - private static Map<String, IHistogram1D> layersHitPlots = new HashMap<String, IHistogram1D>(); - private static Map<String, IHistogram1D> hitCountPlots = new HashMap<String, IHistogram1D>(); - private static Map<String, IHistogram1D> firstSamplePlots = new HashMap<String, IHistogram1D>(); - private static Map<String, IHistogram1D> firstSamplePlotsNoise = new HashMap<String, IHistogram1D>(); - private static Map<String, IHistogram2D> firstSamplePlotsNoisePerChannel = new HashMap<String, IHistogram2D>(); + private static final Map<String, IHistogram1D> hitsPerSensorPlots = new HashMap<String, IHistogram1D>(); + private static final Map<String, int[]> hitsPerSensor = new HashMap<String, int[]>(); + private static final Map<String, IHistogram1D> layersHitPlots = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram1D> hitCountPlots = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram1D> firstSamplePlots = new HashMap<String, IHistogram1D>(); +// private static Map<String, IHistogram1D> firstSamplePlotsNoise = new HashMap<String, IHistogram1D>(); + private static final Map<String, IHistogram2D> firstSamplePlotsNoisePerChannel = new HashMap<String, IHistogram2D>(); private List<HpsSiSensor> sensors; private static final String SUBDETECTOR_NAME = "Tracker"; - private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; - + private final String rawTrackerHitCollectionName = "SVTRawTrackerHits"; + // Counters double eventCount = 0; double totalHitCount = 0; @@ -85,34 +85,6 @@ public void setSaveRootFile(boolean save) { saveRootFile = save; - } - - - 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; } /** @@ -158,9 +130,10 @@ for (HpsSiSensor sensor : sensors) { hitsPerSensorPlots.get(sensor.getName()).reset(); firstSamplePlots.get(sensor.getName()).reset(); - firstSamplePlotsNoise.get(sensor.getName()).reset(); - if(doPerChannelSamplePlots) +// firstSamplePlotsNoise.get(sensor.getName()).reset(); + if (doPerChannelSamplePlots) { firstSamplePlotsNoisePerChannel.get(sensor.getName()).reset(); + } } for (IHistogram1D histogram : layersHitPlots.values()) { @@ -173,12 +146,13 @@ } + @Override protected void detectorChanged(Detector detector) { // Get the HpsSiSensor objects from the geometry sensors = detector.getSubdetector(SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class); - if (sensors.size() == 0) { + if (sensors.isEmpty()) { throw new RuntimeException("No sensors were found in this detector."); } @@ -228,63 +202,63 @@ plotters.put("First sample distributions (pedestal shifts)", plotterFactory.create("First sample distributions (pedestal shifts)")); plotters.get("First sample distributions (pedestal shifts)").createRegions(6, 6); - plotters.put("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)", plotterFactory.create("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)")); - plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").createRegions(6, 6); - - if(doPerChannelSamplePlots) { - plotters.put("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)", plotterFactory.create("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)")); - plotters.get("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)").createRegions(6, 6); - } - - +// plotters.put("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)", plotterFactory.create("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)")); +// plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").createRegions(6, 6); + if (doPerChannelSamplePlots) { + plotters.put("First sample channel distributions (pedestal shifts)", plotterFactory.create("First sample channel distributions (pedestal shifts)")); + plotters.get("First sample channel distributions (pedestal shifts)").createRegions(6, 6); + } + for (HpsSiSensor sensor : sensors) { firstSamplePlots.put(sensor.getName(), histogramFactory.createHistogram1D(sensor.getName() + " - first sample", 100, -500.0, 2000.0)); - plotters.get("First sample distributions (pedestal shifts)").region(this.computePlotterRegion(sensor)) + plotters.get("First sample distributions (pedestal shifts)").region(SvtPlotUtils.computePlotterRegion(sensor)) .plot(firstSamplePlots.get(sensor.getName()), this.createStyle(sensor, "First sample - pedestal [ADC counts]", "")); - firstSamplePlotsNoise.put(sensor.getName(), - histogramFactory.createHistogram1D(sensor.getName() + " - first sample (MAX_SAMPLE>=4)", 100, -500.0, 2000.0)); - plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").region(this.computePlotterRegion(sensor)) - .plot(firstSamplePlotsNoise.get(sensor.getName()), this.createStyle(sensor, "First sample - pedestal (MAX_SAMPLE>=4) [ADC counts]", "")); - - if( doPerChannelSamplePlots ) { +// firstSamplePlotsNoise.put(sensor.getName(), +// histogramFactory.createHistogram1D(sensor.getName() + " - first sample (MAX_SAMPLE>=4)", 100, -500.0, 2000.0)); +// plotters.get("First sample distributions (pedestal shifts, MAX_SAMPLE>=4)").region(SvtPlotUtils.computePlotterRegion(sensor)) +// .plot(firstSamplePlotsNoise.get(sensor.getName()), this.createStyle(sensor, "First sample - pedestal (MAX_SAMPLE>=4) [ADC counts]", "")); + + if (doPerChannelSamplePlots) { firstSamplePlotsNoisePerChannel.put(sensor.getName(), - histogramFactory.createHistogram2D(sensor.getName() + " channels - first sample (MAX_SAMPLE>=4)", 640, -0.5,639.5, 20, -500.0, 500.0)); - plotters.get("First sample channel distributions (pedestal shifts, MAX_SAMPLE>=4)").region(this.computePlotterRegion(sensor)) - .plot(firstSamplePlotsNoisePerChannel.get(sensor.getName()), this.createStyle(sensor, "First sample channels - pedestal (MAX_SAMPLE>=4) [ADC counts]", "")); - } - - + histogramFactory.createHistogram2D(sensor.getName() + " channels - first sample", 640, -0.5, 639.5, 20, -500.0, 500.0)); + plotters.get("First sample channel distributions (pedestal shifts)").region(SvtPlotUtils.computePlotterRegion(sensor)) + .plot(firstSamplePlotsNoisePerChannel.get(sensor.getName()), this.createStyle(sensor, "First sample channels - pedestal [ADC counts]", "")); + } + } for (IPlotter plotter : plotters.values()) { for (int regionN = 0; regionN < plotter.numberOfRegions(); regionN++) { PlotterRegion region = ((PlotterRegion) ((Plotter) plotter).region(regionN)); - if (region.getPlottedObjects().size() == 0) { + if (region.getPlottedObjects().isEmpty()) { continue; } region.getPanel().addMouseListener(new PopupPlotterListener(region)); } - if(showPlots) + if (showPlots) { plotter.show(); - } - } - + } + } + } + + @Override public void process(EventHeader event) { if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { return; } - if(debug && ((int) eventCount % 100 == 0) ) + if (debug && ((int) eventCount % 100 == 0)) { System.out.println(this.getClass().getSimpleName() + ": processed " + String.valueOf(eventCount) + " events"); - + } + eventCount++; - - - if(outputRootFilename.isEmpty()) - outputRootFilename = "run" + String.valueOf( event.getRunNumber()); - + + if (outputRootFilename.isEmpty()) { + outputRootFilename = "run" + String.valueOf(event.getRunNumber()); + } + // Get RawTrackerHit collection from event. List<RawTrackerHit> rawHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); @@ -296,7 +270,7 @@ for (RawTrackerHit rawHit : rawHits) { HpsSiSensor sensor = (HpsSiSensor) rawHit.getDetectorElement(); int channel = rawHit.getIdentifierFieldValue("strip"); - double pedestal = sensor.getPedestal(channel,0); + double pedestal = sensor.getPedestal(channel, 0); // Find the sample with maximum ADC count int maxSample = 0; double maxSampleValue = 0; @@ -309,15 +283,17 @@ hitsPerSensor.get(sensor.getName())[0]++; firstSamplePlots.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal); - if (maxSampleCutForNoise >=0 && maxSample >= maxSampleCutForNoise) { - firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal); - if( doPerChannelSamplePlots ) - firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal); - } else { - firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal); - if( doPerChannelSamplePlots ) - firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal); - } +// if (maxSampleCutForNoise >= 0 && maxSample >= maxSampleCutForNoise) { +// firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal); + if (doPerChannelSamplePlots) { + firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal); + } +// } else { +// firstSamplePlotsNoise.get(sensor.getName()).fill(rawHit.getADCValues()[0] - pedestal); +// if (doPerChannelSamplePlots) { +// firstSamplePlotsNoisePerChannel.get(sensor.getName()).fill(channel, rawHit.getADCValues()[0] - pedestal); +// } +// } } int[] topLayersHit = new int[12]; @@ -376,8 +352,8 @@ System.out.println("% Total Top SVT Hits/Event: " + totalTopHitCount / eventCount); System.out.println("% Total Bottom SVT Hits/Event: " + totalBotHitCount / eventCount); System.out.println("\n%================================================%"); - - if(saveRootFile) { + + if (saveRootFile) { String rootFileName = outputRootFilename.isEmpty() ? "svthitplots.root" : outputRootFilename + "_svthitplots.root"; RootFileStore rootFileStore = new RootFileStore(rootFileName); try { @@ -388,12 +364,11 @@ e.printStackTrace(); } } - + } public void setShowPlots(boolean showPlots) { this.showPlots = showPlots; } - } Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackTimePlots.java Tue Mar 1 18:20:12 2016 @@ -7,17 +7,14 @@ import hep.aida.IPlotterStyle; import hep.aida.ref.plotter.style.registry.IStyleStore; import hep.aida.ref.plotter.style.registry.StyleRegistry; - import java.util.List; import static org.hps.monitoring.drivers.trackrecon.PlotAndFitUtilities.plot; -import org.hps.record.triggerbank.AbstractIntData; -import org.hps.record.triggerbank.TestRunTriggerData; import org.lcsim.detector.tracker.silicon.DopedSilicon; import org.lcsim.detector.tracker.silicon.HpsSiSensor; import org.lcsim.event.EventHeader; -import org.lcsim.event.GenericObject; +import org.lcsim.event.RawTrackerHit; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit; import org.lcsim.fit.helicaltrack.HelicalTrackCross; @@ -116,7 +113,7 @@ for (int i = 0; i < nlayers; i++) { int region = computePlotterRegion(i); - trackHit2D[i] = aida.histogram2D("Layer " + i + " trackHit vs dt", 75, -50, 100.0, 50, -20, 20.0); + trackHit2D[i] = aida.histogram2D("Layer " + i + " trigger phase vs dt", 80, -20, 20.0, 6, 0, 24.0); plot(plotter5, trackHit2D[i], style2d, region); trackHitDtChan[i] = aida.histogram2D("Layer " + i + " dt vs position", 200, -20, 20, 50, -20, 20.0); plot(plotter6, trackHitDtChan[i], style2d, region); @@ -124,23 +121,23 @@ plotter.show(); plotter3.show(); plotter4.show(); -// plotter5.show();"Track Time vs. dt" -// plotter6.show(); "Track dt vs. Channel" + plotter5.show();//"Track Time vs. dt" + plotter6.show();// "Track dt vs. Channel" for (int module = 0; module < 2; module++) { - trackT0[module] = aida.histogram1D((module == 0 ? "Top" : "Bottom") + " Track Time", 75, -50, 100.0); + trackT0[module] = aida.histogram1D((module == 0 ? "Top" : "Bottom") + " Track Time", 80, -20, 20.0); plot(plotter2, trackT0[module], null, module); - trackTrigTime[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " Track Time vs. Trig Time", 75, -50, 100.0, 6, -2, 22); + trackTrigTime[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " Track Time vs. Trig Time", 80, -20, 20.0, 6, 0, 24); plot(plotter2, trackTrigTime[module], style2d, module + 2); trackTimeRange[module] = aida.histogram1D((module == 0 ? "Top" : "Bottom") + " Track Hit Time Range", 75, 0, 30.0); plot(plotter7, trackTimeRange[module], null, module); - trackTimeMinMax[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " First and Last Track Hit Times", 75, -50, 100.0, 75, -50, 100.0); + trackTimeMinMax[module] = aida.histogram2D((module == 0 ? "Top" : "Bottom") + " First and Last Track Hit Times", 80, -20, 20.0, 80, -20, 20.0); plot(plotter7, trackTimeMinMax[module], style2d, module + 2); } plotter2.show(); -// plotter7.show(); //"Track Hit Time Range" + plotter7.show(); //"Track Hit Time Range" } public void setHitCollection(String hitCollection) { @@ -166,7 +163,7 @@ List<Track> tracks = event.get(Track.class, trackCollectionName); for (Track track : tracks) { - int trackModule = -1; + int trackModule; if (track.getTrackerHits().get(0).getPosition()[2] > 0) { trackModule = 0; } else { @@ -179,7 +176,8 @@ for (TrackerHit hitCross : track.getTrackerHits()) { for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) { int layer = hit.layer(); - trackHitT0[trackModule][layer - 1].fill(hit.dEdx() / DopedSilicon.ENERGY_EHPAIR); + int module = ((RawTrackerHit) hit.rawhits().get(0)).getIdentifierFieldValue("module"); + trackHitT0[module][layer - 1].fill(hit.dEdx() / DopedSilicon.ENERGY_EHPAIR); trackTime += hit.time(); hitCount++; if (hit.time() > maxTime) { @@ -202,8 +200,9 @@ for (TrackerHit hitCross : track.getTrackerHits()) { for (HelicalTrackStrip hit : ((HelicalTrackCross) hitCross).getStrips()) { int layer = hit.layer(); - trackHitDt[trackModule][layer - 1].fill(hit.time() - trackTime); - trackHit2D[layer - 1].fill(trackTime, hit.time() - trackTime); + int module = ((RawTrackerHit) hit.rawhits().get(0)).getIdentifierFieldValue("module"); + trackHitDt[module][layer - 1].fill(hit.time() - trackTime); + trackHit2D[layer - 1].fill(hit.time() - trackTime, event.getTimeStamp() % 24); trackHitDtChan[layer - 1].fill(hit.umeas(), hit.time() - trackTime); } } Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/TrackingReconPlots.java Tue Mar 1 18:20:12 2016 @@ -273,7 +273,7 @@ HpsHelicalTrackFit hpstrk = new HpsHelicalTrackFit(ht); double svt_l12 = 900.00;//mm ~approximately...this doesn't matter much double ecal_face = 1393.00;//mm ~approximately ... this matters! Should use typical shower depth...or, once have cluster match, use that value of Z - TrackState stateAtEcal = TrackUtils.extrapolateTrackUsingFieldMap(trk, svt_l12, ecal_face, 5.0, event.getDetector().getFieldMap()); + TrackState stateAtEcal = TrackUtils.getTrackStateAtECal(trk); Hep3Vector posAtEcal = new BasicHep3Vector(stateAtEcal.getReferencePoint()); //Hep3Vector posAtEcal = hpstrk.getPositionAtZMap(svt_l12, ecal_face, 5.0, event.getDetector().getFieldMap())[0]; List<Cluster> clusters = event.get(Cluster.class, ecalCollectionName); @@ -287,11 +287,11 @@ Hep3Vector clusterPos = new BasicHep3Vector(clust.getPosition()); double zCluster = clusterPos.z(); //improve the extrapolation...use the reconstructed cluster z-position - stateAtEcal = TrackUtils.extrapolateTrackUsingFieldMap(trk, svt_l12, zCluster, 5.0, event.getDetector().getFieldMap()); - posAtEcal = new BasicHep3Vector(stateAtEcal.getReferencePoint()); +// stateAtEcal = TrackUtils.extrapolateTrackUsingFieldMap(trk, svt_l12, zCluster, 5.0, event.getDetector().getFieldMap()); +// posAtEcal = new BasicHep3Vector(stateAtEcal.getReferencePoint()); double eOverP = clust.getEnergy() / pmag; - double dx = posAtEcal.x() - clusterPos.x(); - double dy = posAtEcal.y() - clusterPos.y(); + double dx = posAtEcal.y() - clusterPos.x(); + double dy = posAtEcal.z() - clusterPos.y(); heOverP.fill(eOverP); hdelXECal.fill(dx); hdelYECal.fill(dy); Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim Tue Mar 1 18:20:12 2016 @@ -10,6 +10,7 @@ <driver name="PedestalPlots" />--> <driver name="SensorOccupancy" /> <driver name="RawTrackerHitFitterDriver" /> + <!--<driver name="SVTPulseFitPlots" />--> <driver name="TrackerHitDriver" /> <driver name="ClusterPlots" /> <driver name="CleanupDriver" /> @@ -26,10 +27,10 @@ </driver> <driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots"> <doPerChannelsSampleplots>true</doPerChannelsSampleplots> - <saveRootFile>false</saveRootFile> + <!--<saveRootFile>false</saveRootFile>--> </driver> - <driver name="SamplesPlots" type="org.hps.monitoring.drivers.svt.SamplesPlots" /> - <driver name="PedestalPlots" type="org.hps.monitoring.drivers.svt.PedestalPlots" /> + <!--<driver name="SamplesPlots" type="org.hps.monitoring.drivers.svt.SamplesPlots" />--> + <!--<driver name="PedestalPlots" type="org.hps.monitoring.drivers.svt.PedestalPlots" />--> <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver"> <fitAlgorithm>Linear</fitAlgorithm> <useTimestamps>false</useTimestamps> @@ -45,6 +46,7 @@ <neighborDeltaT>8.0</neighborDeltaT> <debug>false</debug> </driver> + <!--<driver name="SVTPulseFitPlots" type="org.hps.monitoring.drivers.svt.SVTPulseFitPlots" />--> <driver name="ClusterPlots" type="org.hps.monitoring.drivers.svt.SvtClusterPlots"> <saveRootFile>false</saveRootFile> </driver>