Author: [log in to unmask]
Date: Wed Feb 25 16:46:31 2015
New Revision: 2210
Log:
implement refresh rate gets up to 20KHz
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 Wed Feb 25 16:46:31 2015
@@ -18,22 +18,34 @@
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;
+ long currentTime;
+ int refreshRate=1000; // units = ms
+
+ 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};
String collectionName = "EcalRunningPedestals";
-// static {
-// org.hps.monitoring.plotting.MonitoringAnalysisFactory.register();
-// }
MonitoringPlotFactory plotFactory = (MonitoringPlotFactory) AIDA.defaultInstance()
.analysisFactory().createPlotterFactory("ECal Pedestal Monitoring");
@@ -45,38 +57,36 @@
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();
- /*
- for (EcalChannel cc : ecalConditions.getChannelCollection()) {
- final int crate = cc.getCrate();
- final int slot = cc.getSlot();
- if (!stripCharts.containsKey(crate)) {
- stripCharts.put(crate,new HashMap<Integer, JFreeChart>());
- }
- if (!stripCharts2.containsKey(crate)) {
- stripCharts2.put(crate,new HashMap<Integer, TimeSeries>());
- }
- if (!stripCharts.get(crate).containsKey(slot)) {
- String name = String.format("C%dS%02d",crate,slot);
- JFreeChart stripChart = plotFactory.createStripChart(name,"asdf",
- maxAge,maxCount,rangeSize);
- stripCharts.get(crate).put(slot,stripChart);
- stripCharts2.get(crate).put(slot,StripChartUtil.getTimeSeries(stripChart));
- }
- }
- */
+
// 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));
}
@@ -89,6 +99,10 @@
if (!event.hasItem(collectionName)) {
return;
}
+
+ currentTime=System.currentTimeMillis();
+ if (currentTime - previousTime < refreshRate) return;
+ previousTime=currentTime;
// get the running pedestals:
Map<EcalChannel, Double> peds = (Map<EcalChannel, Double>) event.get(collectionName);
@@ -126,4 +140,33 @@
}
}
+
+
+ public EcalChannel findChannel(int crate, int slot, int chan) {
+ for (EcalChannel cc : ecalConditions.getChannelCollection()) {
+ if (crate == cc.getCrate() && slot == cc.getSlot() && chan == cc.getChannel()) {
+ return cc;
+ }
+ }
+ throw new RuntimeException(String.format(
+ "Could not find channel: (crate,slot,channel)=(%d,%d,%d)",crate,slot,chan));
+ }
+
+ public double getAveragePedestal(int crate,int slot)
+ {
+ int nsum=0;
+ double sum=0;
+ for (int chan=0; chan<16; chan++) {
+ for (EcalChannel cc : ecalConditions.getChannelCollection()) {
+ if (cc.getCrate()!=crate || cc.getSlot()!=slot || cc.getChannel()!=chan) continue;
+ sum += getStaticPedestal(crate,slot,chan);
+ nsum ++;
+ }
+ }
+ return (nsum>0 ? sum/nsum : sum);
+ }
+
+ public double getStaticPedestal(int crate, int slot, int chan) {
+ return ecalConditions.getChannelConstants(findChannel(crate,slot,chan)).getCalibration().getPedestal();
+ }
}
|