Commit in hps-java/src/main/java/org/lcsim/hps/monitoring on MAIN | |||
MonitoringPlotsDriver.java | -255 | 1.3 removed |
diff -N MonitoringPlotsDriver.java --- MonitoringPlotsDriver.java 18 Apr 2012 21:06:54 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,255 +0,0 @@
-package org.lcsim.hps.monitoring; - -import hep.aida.IAnalysisFactory; -import hep.aida.IBaseHistogram; -import hep.aida.ICloud1D; -import hep.aida.IHistogram1D; -import hep.aida.IManagedObject; -import hep.aida.IPlotter; -import hep.aida.IPlotterStyle; -import hep.aida.ITree; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.lcsim.detector.tracker.silicon.SiSensor; -import org.lcsim.event.EventHeader; -import org.lcsim.event.RawCalorimeterHit; -import org.lcsim.event.RawTrackerHit; -import org.lcsim.event.Track; -import org.lcsim.event.TrackerHit; -import org.lcsim.geometry.Detector; -import org.lcsim.util.Driver; -import org.lcsim.util.aida.AIDA; - -// TODO Add Histogram2D of ECal cells. Can plot as color map. -public class MonitoringPlotsDriver extends Driver implements Resettable { - - private Map<SiSensor,int[]> occupancyMap; - private IPlotter occuPlot; - private List<IPlotter> plotters = new ArrayList<IPlotter>(); - private AIDA aida = AIDA.defaultInstance(); - private String rawTrackerHitCollectionName = "RawTrackerHitMaker_RawTrackerHits"; - private String rawCalorimeterHitCollectionName = "EcalRawHits"; - private String trackerHitCollectionName = "StripClusterer_SiTrackerHitStrip1D"; - private String trackerName = "Tracker"; - private int eventCount; - private Detector detector = null; - - private IHistogram1D adcValuePlot; - private IHistogram1D rawHitCountPlot; - private IHistogram1D tkrHitCountPlot; - private IHistogram1D tkrCountPlot; - private ICloud1D hitsPerTrackPlot; - private IHistogram1D tkrMomXPlot; - private IHistogram1D tkrMomYPlot; - private IHistogram1D tkrMomZPlot; - private IHistogram1D tkrMomPlot; - private ICloud1D timePlot; - private ICloud1D ecalTimePlot; - private ICloud1D ecalAmplitudePlot; - private ICloud1D ecalHitsPlot; - - protected void detectorChanged(Detector detector) { - - this.detector = detector; - - aida.tree().cd("/"); - adcValuePlot = aida.histogram1D("ADC Value", 500, 0, 500); - rawHitCountPlot = aida.histogram1D("Number of RawTrackerHits in Event", 100, 0, 100); - tkrHitCountPlot = aida.histogram1D("Number of TrackerHits in Event", 50, 0, 50); - tkrCountPlot = aida.histogram1D("Number of Tracks in Event", 20, 0, 20); - hitsPerTrackPlot = aida.cloud1D("Number of Hits per Track"); - tkrMomXPlot = aida.histogram1D("Track Px", 200, 0, 2.0); - tkrMomYPlot = aida.histogram1D("Track Py", 160, -0.2, 0.2); - tkrMomZPlot = aida.histogram1D("Track Pz", 160, -0.2, 0.2); - tkrMomPlot = aida.histogram1D("Track P", 200, 0, 4.0); - timePlot = aida.cloud1D("Time [ns]"); - - IAnalysisFactory fac = aida.analysisFactory(); - IPlotter plotter = fac.createPlotterFactory().create("HPS SVT Plots"); - plotters.add(plotter); - plotter.style().dataStyle().errorBarStyle().setVisible(false); - plotter.createRegions(4,4); - plotter.region(0).plot(adcValuePlot); - plotter.region(1).plot(rawHitCountPlot); - plotter.region(2).plot(tkrHitCountPlot); - plotter.region(3).plot(tkrCountPlot); - plotter.region(4).plot(hitsPerTrackPlot); - plotter.region(5).plot(tkrMomXPlot); - plotter.region(6).plot(tkrMomYPlot); - plotter.region(7).plot(tkrMomZPlot); - plotter.region(8).plot(tkrMomPlot); - plotter.region(9).plot(timePlot); - plotter.show(); - - // Make a list of sensors in the SVT. - List<SiSensor> sensors = detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class); - - // Setup occupancy plots. - IPlotter plotter2 = fac.createPlotterFactory().create("HPS SVT Sensor Occupancy Plots"); - plotters.add(plotter2); - IPlotterStyle style = plotter2.style(); - style.dataStyle().fillStyle().setColor("yellow"); - style.dataStyle().errorBarStyle().setVisible(false); - plotter2.createRegions(5, 4); - int ns = sensors.size(); - for (int i=0; i<ns; i++) { - IHistogram1D occupancyPlot = aida.histogram1D(sensors.get(i).getName(), 640, 0, 639); - plotter2.region(i).plot(occupancyPlot); - } - plotter2.show(); - - // Data structure for occupancy calculations by sensor. - occupancyMap = new HashMap<SiSensor,int[]>(); - for (SiSensor sensor : sensors) { - occupancyMap.put(sensor, new int[640]); - } - - // Normalized occupancy plots are only setup the first time. - if (occuPlot == null) { - IPlotter plotter3 = fac.createPlotterFactory().create("HPS SVT Normalized Sensor Occupancy Plots"); - occuPlot = plotter3; - IPlotterStyle style3 = plotter3.style(); - style3.dataStyle().fillStyle().setColor("green"); - style3.dataStyle().markerStyle().setColor("green"); - style3.dataStyle().errorBarStyle().setVisible(false); - style3.statisticsBoxStyle().setVisible(false); - plotter3.createRegions(5, 4); - for (int i=0; i<ns; i++) { - IHistogram1D occupancyPlot = aida.histogram1D(sensors.get(i).getName() + " Normalized", 640, 0, 639); - plotter3.region(i).plot(occupancyPlot); - } - plotter3.show(); - } - - // Ecal plots. - IPlotter plotter4 = fac.createPlotterFactory().create("HPS ECAL Plots"); - plotters.add(plotter4); - ecalTimePlot = aida.cloud1D("Timestamp"); - ecalAmplitudePlot = aida.cloud1D("Amplitude"); - ecalHitsPlot = aida.cloud1D("Number of Hits"); - plotter4.createRegions(2, 2); - plotter4.region(0).plot(ecalTimePlot); - plotter4.region(1).plot(ecalAmplitudePlot); - plotter4.region(2).plot(ecalHitsPlot); - plotter4.show(); - } - - public MonitoringPlotsDriver() - {} - - public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) { - this.rawTrackerHitCollectionName = rawTrackerHitCollectionName; - } - - public void setRawCalorimeterHitCollectionName(String rawCalorimeterHitCollectionName) { - this.rawCalorimeterHitCollectionName = rawCalorimeterHitCollectionName; - } - - public void setTrackerHitCollectionName(String trackerHitCollectionName) { - this.trackerHitCollectionName = trackerHitCollectionName; - } - - // Call this to reset if "reset" button is pressed on monitoring GUI. - public void reset() { - for (IPlotter plotter : plotters) { - plotter.hide(); - plotter.clearRegions(); - } - plotters.clear(); - clearAidaTree(); - detectorChanged(detector); - eventCount = 0; - } - - private void clearAidaTree() { - ITree tree = AIDA.defaultInstance().tree(); - String names[] = tree.listObjectNames("/", true); - for (String name : names) { - IManagedObject o = tree.find(name); - if (o instanceof IBaseHistogram) { - ((IBaseHistogram) o).reset(); - } - } - } - - public void process(EventHeader event) { - - ++eventCount; - - // Get collections from event. - List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); - List<RawCalorimeterHit> rawCalorimeterHits = event.get(RawCalorimeterHit.class, rawCalorimeterHitCollectionName); - - // Make ECal plots. - fillEcalPlots(aida, rawCalorimeterHits); - - // Fill RawTrackerHit count. - rawHitCountPlot.fill(rawTrackerHits.size()); - - // Loop over RawTrackerHit collection. - for (RawTrackerHit hit : rawTrackerHits) { - - // Fill ADC value plot. - adcValuePlot.fill(hit.getADCValues()[0]); - - // Fill time plot. - timePlot.fill(hit.getTime()); - - // Fill basic (non-normalized) occupancy plot. - aida.histogram1D(hit.getDetectorElement().getName()).fill(hit.getIdentifierFieldValue("strip")); - - // Increment hit counts for occupancy calculations. - int[] strips = occupancyMap.get((SiSensor) hit.getDetectorElement()); - strips[hit.getIdentifierFieldValue("strip")] += 1; - } - - // Normalized occupancy plots. - occuPlot.clearRegions(); - int si = 0; - for (SiSensor sensor : occupancyMap.keySet()) { - int[] strips = occupancyMap.get(sensor); - aida.histogram1D(sensor.getName() + " Normalized").reset(); - for (int i = 0; i < strips.length; i++) { - double stripOccupancy = (double) strips[i] / (double) (eventCount + 1); - if (stripOccupancy != 0) { - aida.histogram1D(sensor.getName() + " Normalized").fill(i, stripOccupancy); - } - } - occuPlot.region(si).plot(aida.histogram1D(sensor.getName() + " Normalized")); - ++si; - } - occuPlot.show(); - - // Get Track list from event. This breaks if > 1 Track collections are generated by LCSim. - List<Track> tracks = event.get(Track.class).get(0); - - // Plot number of Tracks. - tkrCountPlot.fill(tracks.size()); - - // Track plots. - for (Track track : tracks) { - aida.cloud1D("Number of Hits per Track").fill(track.getTrackerHits().size()); - tkrMomXPlot.fill(track.getPX()); - tkrMomYPlot.fill(track.getPY()); - tkrMomZPlot.fill(track.getPZ()); - double[] p = track.getMomentum(); - tkrMomPlot.fill(Math.sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2])); - } - - // Number of TrackerHits. - List<TrackerHit> trackerHits = event.get(TrackerHit.class, trackerHitCollectionName); - tkrHitCountPlot.fill(trackerHits.size()); - } - - private void fillEcalPlots(AIDA aida, List<RawCalorimeterHit> hits) { - ecalHitsPlot.fill(hits.size()); - for (RawCalorimeterHit hit : hits) { - ecalTimePlot.fill(hit.getTimeStamp()); - ecalAmplitudePlot.fill(hit.getAmplitude()); - } - } -}
\ No newline at end of file
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1