Print

Print


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();
+    }
 }