Author: [log in to unmask] Date: Tue Mar 17 16:27:51 2015 New Revision: 2476 Log: overlaying pedestal strip charts Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/subsys/ecal/EcalPedestalMonitor.java Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/subsys/ecal/EcalPedestalMonitor.java ============================================================================= --- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/subsys/ecal/EcalPedestalMonitor.java (original) +++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/subsys/ecal/EcalPedestalMonitor.java Tue Mar 17 16:27:51 2015 @@ -1,108 +1,66 @@ package org.hps.monitoring.subsys.ecal; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.hps.conditions.database.DatabaseConditionsManager; import org.hps.conditions.ecal.EcalChannel; import org.hps.conditions.ecal.EcalConditions; import org.hps.monitoring.plotting.MonitoringPlotFactory; -import org.hps.monitoring.plotting.StripChartUtil; import org.jfree.chart.JFreeChart; -import org.jfree.data.time.Millisecond; -import org.jfree.data.time.TimeSeries; +import org.jfree.chart.axis.DateAxis; +import org.jfree.data.time.Second; +import org.jfree.data.time.TimeSeriesCollection; import org.lcsim.event.EventHeader; import org.lcsim.geometry.Detector; import org.lcsim.util.Driver; import org.lcsim.util.aida.AIDA; + /* * Reads output of org.hps.recon.ecal.RunningPedestalDriver and makes strip charts. - * - * Are we going to lose/reinitialize these plots when run ends? - * Or can we keep on going off ET-ring across runs? * * Baltzell */ public class EcalPedestalMonitor extends Driver { - long previousTime; + static final int REFRESH_RATE = 10*1000; // units = ms + static final double DOMAIN_SIZE = 4*60*60*1000; // x-axis range (ms) + static final int crates[]={1,2}; + static final int slots[]={3,4,5,6,7,8,9,14,15,16,17,18,19,20}; + static final String slotNames[]={"Sl3","Sl4","Sl5","Sl6","Sl7","Sl8","Sl9","Sl14","Sl15","Sl16","Sl17","Sl18","Sl19","Sl20"}; + static final String collectionName = "EcalRunningPedestals"; + long currentTime; - int refreshRate=1000; // units = ms - + long previousTime=0; int nDetectorChanges=0; - - int maxAge = 999999999; - int maxCount = 100000; - int rangeSize = 100000; - - // None of this "works": - //int maxAge = 86400000; // 1 day (units ms) - //int maxCount = 999999999;//(int)maxAge/refreshRate; - //int rangeSize = 999999999;//maxAge; // what is this? - - final int crates[]={1,2}; - final int slots[]={3,4,5,6,7,8,9,14,15,16,17,18,19,20}; + private EcalConditions ecalConditions = null; + List<JFreeChart> charts = new ArrayList<JFreeChart>(); + MonitoringPlotFactory plotFactory = + (MonitoringPlotFactory) AIDA.defaultInstance().analysisFactory().createPlotterFactory("ECal Pedestal Monitoring"); - String collectionName = "EcalRunningPedestals"; - - MonitoringPlotFactory plotFactory = (MonitoringPlotFactory) AIDA.defaultInstance() - .analysisFactory().createPlotterFactory("ECal Pedestal Monitoring"); - - Map<Integer, Map<Integer, JFreeChart>> stripCharts = new HashMap<Integer, Map<Integer, JFreeChart>>(); - Map<Integer, Map<Integer, TimeSeries>> stripCharts2 = new HashMap<Integer, Map<Integer, TimeSeries>>(); - - private EcalConditions ecalConditions = null; - - public void startOfData() { - //plotFactory.createStripChart("X","Y",maxAge,maxCount,rangeSize); - plotFactory.create().show(); - - //System.out.println("---------------------------- "+maxCount); - } - - @Override public void detectorChanged(Detector detector) { - - // this would defeat the purpose. if (nDetectorChanges++ > 0) return; - - currentTime=0; - previousTime=0; - ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions(); - - // put them in order: for (int crate : crates) { - stripCharts.put(crate,new HashMap<Integer, JFreeChart>()); - stripCharts2.put(crate,new HashMap<Integer, TimeSeries>()); - for (int slot : slots) { - - final double ped=getAveragePedestal(crate,slot); - - String name = String.format("C%dS%02d",crate,slot); - JFreeChart stripChart = plotFactory.createStripChart(name,"asdf", - maxAge,maxCount,rangeSize); -// stripChart.getXYPlot().getRangeAxis().setRange(70,140); -// stripChart.getXYPlot().getRangeAxis().setFixedAutoRange(10); -// stripChart.getXYPlot().getRangeAxis().setAutoRange(true); - stripChart.getXYPlot().getRangeAxis().setRangeAboutValue(ped,10); - stripCharts.get(crate).put(slot,stripChart); - stripCharts2.get(crate).put(slot,StripChartUtil.getTimeSeries(stripChart)); - } + charts.add(plotFactory.createTimeSeriesChart( + "Crate " + crate, + "Offset Pedestal (ADC)", + slots.length, slotNames, + DOMAIN_SIZE)); } } - + @Override public void process(EventHeader event) { - if (!event.hasItem(collectionName)) { - return; - } + if (!event.hasItem(collectionName)) return; - currentTime=System.currentTimeMillis(); - if (currentTime - previousTime < refreshRate) return; - previousTime=currentTime; + currentTime = System.currentTimeMillis(); + if (currentTime - previousTime < REFRESH_RATE) return; + previousTime = currentTime; // get the running pedestals: Map<EcalChannel, Double> peds = (Map<EcalChannel, Double>) event.get(collectionName); @@ -110,6 +68,7 @@ // tally slot pedestals: Map<Integer, Map<Integer, Double>> pedsum = new HashMap<Integer, Map<Integer, Double>>(); Map<Integer, Map<Integer, Integer>> npedsum = new HashMap<Integer, Map<Integer, Integer>>(); + for (EcalChannel cc : peds.keySet()) { final Double ped = peds.get(cc); final int crate = cc.getCrate(); @@ -131,17 +90,24 @@ } // fill strip charts: + long now = System.currentTimeMillis(); for (int crate : pedsum.keySet()) { - for (int slot : pedsum.get(crate).keySet()) { - - final double ped = pedsum.get(crate).get(slot) / npedsum.get(crate).get(slot); - stripCharts2.get(crate).get(slot).add(new Millisecond(new Date()),ped); + TimeSeriesCollection cc=getTimeSeriesCollection(crate-1); + JFreeChart chart=charts.get(crate-1); + DateAxis ax=(DateAxis)chart.getXYPlot().getDomainAxis(); + ax.setRange(now-DOMAIN_SIZE,now); + for (int slot=0; slot<slots.length; slot++) { + double ped = pedsum.get(crate).get(slots[slot]) / npedsum.get(crate).get(slots[slot]); + ped -= getAveragePedestal(crate,slots[slot])-slot+9; + cc.getSeries(slot).addOrUpdate(new Second(new Date()),ped); } } - } - + TimeSeriesCollection getTimeSeriesCollection(int chartIndex) { + return (TimeSeriesCollection) charts.get(chartIndex).getXYPlot().getDataset(); + } + public EcalChannel findChannel(int crate, int slot, int chan) { for (EcalChannel cc : ecalConditions.getChannelCollection()) { if (crate == cc.getCrate() && slot == cc.getSlot() && chan == cc.getChannel()) {