Author: [log in to unmask] Date: Wed Nov 19 14:45:54 2014 New Revision: 1572 Log: Add Driver and steering to plot ADC values from all ECAL channels. Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalChannelADCPlotsDriver.java java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalChannelADCPlots.lcsim Added: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalChannelADCPlotsDriver.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalChannelADCPlotsDriver.java (added) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalChannelADCPlotsDriver.java Wed Nov 19 14:45:54 2014 @@ -0,0 +1,99 @@ +package org.hps.monitoring.ecal.plots; + +import hep.aida.IAnalysisFactory; +import hep.aida.IHistogram1D; +import hep.aida.IPlotter; +import hep.aida.IPlotterFactory; +import hep.aida.IPlotterStyle; +import hep.aida.ref.plotter.style.registry.StyleRegistry; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.hps.conditions.database.TableConstants; +import org.hps.conditions.ecal.EcalChannel; +import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection; +import org.hps.conditions.ecal.EcalConditions; +import org.lcsim.conditions.ConditionsManager; +import org.lcsim.event.EventHeader; +import org.lcsim.event.RawTrackerHit; +import org.lcsim.geometry.Detector; +import org.lcsim.util.Driver; +import org.lcsim.util.aida.AIDA; + +/** + * This Driver will create a histogram for every channel in the ECAL and plot its ADC values + * from the LCSim event collection of raw hits. + * @author Jeremy McCormick <[log in to unmask]> + */ +public class EcalChannelADCPlotsDriver extends Driver { + + EcalConditions conditions = null; + EcalChannelCollection channels = null; + + List<List<IPlotter>> plotterLists = new ArrayList<List<IPlotter>>(); + + AIDA aida = AIDA.defaultInstance(); + IAnalysisFactory analysisFactory = aida.analysisFactory(); + + public void detectorChanged(Detector detector) { + + conditions = ConditionsManager.defaultInstance().getCachedConditions(EcalConditions.class, TableConstants.ECAL_CONDITIONS).getCachedData(); + + channels = conditions.getChannelCollection(); + + Set<Integer> crates = new HashSet<Integer>(); + Set<Integer> slots = new HashSet<Integer>(); + Set<Integer> channels = new HashSet<Integer>(); + + for (EcalChannel channel : conditions.getChannelCollection()) { + crates.add(channel.getCrate()); + slots.add(channel.getSlot()); + channels.add(channel.getChannel()); + } + + IPlotterStyle style = StyleRegistry.getStyleRegistry().getStore("DefaultStyleStore").getStyle("DefaultHistogram1DStyle"); + style.dataStyle().lineStyle().setVisible(false); + style.legendBoxStyle().setVisible(false); + + for (Integer crate : crates) { + IPlotterFactory plotterFactory = analysisFactory.createPlotterFactory("ECAL Crate " + crate); + int plottersIndex = crate - 1; + plotterLists.add(new ArrayList<IPlotter>()); + List<IPlotter> plotters = plotterLists.get(plottersIndex); + for (Integer slot : slots) { + IPlotter plotter = plotterFactory.create("Slot " + slot); + plotters.add(plotter); + plotter.createRegions(4, 4); + for (Integer channel : channels) { + String histogramName = "ADC Values : " + crate + " : " + slot + " : " + channel; + IHistogram1D histogram = aida.histogram1D(histogramName, 150, 50, 200.); + plotter.region(channel).plot(histogram, style); + } + plotter.show(); + } + } + } + + public void process(EventHeader event) { + if (event.hasCollection(RawTrackerHit.class, "EcalReadoutHits")) { + List<RawTrackerHit> hits = event.get(RawTrackerHit.class, "EcalReadoutHits"); + for (RawTrackerHit hit : hits) { + EcalChannel channel = channels.findGeometric(hit.getCellID()); + if (channel != null) { + for (short adcValue : hit.getADCValues()) { + try { + aida.histogram1D("ADC Values : " + channel.getCrate() + " : " + channel.getSlot() + " : " + channel.getChannel()).fill(adcValue); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } + } else { + System.err.println("EcalChannel not found for cell ID 0x" + String.format("%08d", Long.toHexString(hit.getCellID()))); + } + } + } + } +} Added: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalChannelADCPlots.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalChannelADCPlots.lcsim (added) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalChannelADCPlots.lcsim Wed Nov 19 14:45:54 2014 @@ -0,0 +1,13 @@ +<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" + xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> + <execute> + <driver name="EventMarkerDriver"/> + <driver name="EcalChannelADCPlotsDriver"/> + </execute> + <drivers> + <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver"> + <eventInterval>1</eventInterval> + </driver> + <driver name="EcalChannelADCPlotsDriver" type="org.hps.monitoring.ecal.plots.EcalChannelADCPlotsDriver"/> + </drivers> +</lcsim>