Author: [log in to unmask] Date: Tue Feb 24 20:07:13 2015 New Revision: 2200 Log: Monitoring driver that will be used when 'timing in' the SVT. For now, this driver is not compatible with the test run geometries. Work in progress. Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java (with props) Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java (added) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtTimingInPlots.java Tue Feb 24 20:07:13 2015 @@ -0,0 +1,98 @@ +package org.hps.monitoring.drivers.svt; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogramFactory; +import hep.aida.IHistogram1D; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; + +import org.lcsim.util.Driver; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.detector.tracker.silicon.SiSensor; +import org.lcsim.event.EventHeader; +import org.lcsim.event.LCRelation; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; + +import org.hps.recon.tracking.FittedRawTrackerHit; + +public class SvtTimingInPlots extends Driver { + + + static IHistogramFactory histogramFactory = IAnalysisFactory.create().createHistogramFactory(null); + IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory(); + protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>(); + protected Map<SiSensor, IHistogram1D> t0Plots = new HashMap<SiSensor, IHistogram1D>(); + + protected void detectorChanged(Detector detector) { + + List<HpsSiSensor> sensors + = detector.getSubdetector("Tracker").getDetectorElement().findDescendants(HpsSiSensor.class); + + //--- t0 Plots ---// + //----------------// + plotters.put("L1-L3 t0", plotterFactory.create("L1-L3 t0")); + plotters.get("L1-L3 t0").createRegions(6,2); + + plotters.put("L4-L6 t0", plotterFactory.create("L4-L6 t0")); + plotters.get("L4-L6 t0").createRegions(6,4); + int index = 0; + for (HpsSiSensor sensor : sensors) { + + if (sensor.getLayerNumber() < 7) { + if (sensor.isTopLayer()) { + index = 2*(sensor.getLayerNumber() - 1); + } else { + index = 2*(sensor.getLayerNumber() - 1) + 1; + } + System.out.println("Layer number: " + sensor.getLayerNumber() + " Index: " + index); + t0Plots.put(sensor,histogramFactory.createHistogram1D(sensor.getName() + " - t0",75, -50, 100.0)); + plotters.get("L1-L3 t0").region(index).plot(t0Plots.get(sensor)); + } else { + if (sensor.isTopLayer() && sensor.isAxial()) { + System.out.println("Top, axial"); + index = 4*(sensor.getLayerNumber() - 7); + } else if (sensor.isTopLayer() && sensor.isStereo()) { + System.out.println("Top, stereo"); + index = 4*(sensor.getLayerNumber() - 7) + 1; + } else if (sensor.isBottomLayer() && sensor.isAxial()) { + System.out.println("Bottom, axial"); + index = 4*(sensor.getLayerNumber() - 7) + 2; + } else if (sensor.isBottomLayer() && sensor.isStereo()) { + System.out.println("Bottom, stereo"); + index = 4*(sensor.getLayerNumber() - 7) + 3; + } + System.out.println("Layer number: " + sensor.getLayerNumber() + " Index: " + index); + t0Plots.put(sensor,histogramFactory.createHistogram1D(sensor.getName() + " - t0",75, -50, 100.0)); + plotters.get("L4-L6 t0").region(index).plot(t0Plots.get(sensor)); + } + } + + for (IPlotter plotter : plotters.values()) { + plotter.show(); + } + } + + + public void process(EventHeader event) { + + if (!event.hasCollection(LCRelation.class, "SVTFittedRawTrackerHits")) + return; + + List<LCRelation> fittedHits = event.get(LCRelation.class, "SVTFittedRawTrackerHits"); + + + for (LCRelation fittedHit : fittedHits) { + + HpsSiSensor sensor + = (HpsSiSensor) ((RawTrackerHit) fittedHit.getFrom()).getDetectorElement(); + + double t0 = FittedRawTrackerHit.getT0(fittedHit); + t0Plots.get(sensor).fill(t0); + } + } +}