Commit in hps-java/src/main on MAIN
java/org/lcsim/hps/monitoring/SensorOccupancyPlotsDriver.java+56-171.2 -> 1.3
                             /MonitoringConsumer.java+50-271.1 -> 1.2
                             /MonitoringGui.java+60-151.1 -> 1.2
resources/org/lcsim/hps/steering/EtSensorOccupancy.lcsim+8-101.1 -> 1.2
+174-69
4 modified files
monitoring updates

hps-java/src/main/java/org/lcsim/hps/monitoring
SensorOccupancyPlotsDriver.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SensorOccupancyPlotsDriver.java	23 Mar 2012 23:47:05 -0000	1.2
+++ SensorOccupancyPlotsDriver.java	25 Mar 2012 07:23:20 -0000	1.3
@@ -12,6 +12,7 @@
 import org.lcsim.detector.tracker.silicon.SiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.RawTrackerHit;
+import org.lcsim.detector.identifier.*;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -27,10 +28,16 @@
     private String trackerName = "Tracker";
     private int eventCount = 0;
     private int eventRefreshRate = 1;
+    private boolean debug = true;
+    Map<SiSensor,Integer> sensorRegionMap;
     
     public SensorOccupancyPlotsDriver()
     {}
     
+    public void setDebug(boolean debug) {
+        this.debug = debug;
+    }
+    
     public void setRawTrackerHitCollectionName(String rawTrackerHitCollectionName) {
         this.rawTrackerHitCollectionName = rawTrackerHitCollectionName;
     }
@@ -38,7 +45,23 @@
     public void setEventRefreshRate(int eventRefreshRate) {
         this.eventRefreshRate = eventRefreshRate;
     }
-    
+    /*
+    private int computeRegion(SiSensor sensor, IIdentifierHelper helper) {
+        IIdentifier id = sensor.getIdentifier();
+        int layer = sensor.getIdentifierHelper().getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+        int module = sensor.getIdentifierHelper().getValue(id, "module"); // 0-1; module number is top or bottom
+        int ix = (layer - 1) / 2;
+        int iy = 0;
+        if (module > 0) {
+            iy += 2;
+        }
+        if (layer % 2 == 0) {
+            iy += 1;
+        }
+        int region = iy * 4 + ix;
+        return region;
+    }
+    */
     protected void detectorChanged(Detector detector) {
         
         // If called > 1 then destroy plots that might be currently up.
@@ -63,46 +86,65 @@
         
         // Make a list of SiSensors in the SVT.
         sensors = this.detector.getSubdetector(trackerName).getDetectorElement().findDescendants(SiSensor.class);        
-        
+       
         // For now throw an error if there are "too many" sensors.
         if (sensors.size() > 20) {
             throw new RuntimeException("Can't handle > 20 sensors at a time.");
         }
-        
-        // Reset or setup the data structure for occupancy calculations by sensor.
+
+        // Map a map of sensors to their region numbers in the plotter.
+        IIdentifierHelper helper = sensors.get(0).getIdentifierHelper();
+        sensorRegionMap = new HashMap<SiSensor,Integer>();
+        for (SiSensor sensor : sensors) {
+            
+            IIdentifier id = sensor.getIdentifier();
+            
+            int layer = helper.getValue(id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+            int module = helper.getValue(id, "module"); // 0-1; module number is top or bottom
+            
+            int ix = (layer - 1) / 2;
+            int iy = 0;
+            if (module > 0) {
+                iy += 2;
+            }
+            if (layer % 2 == 0) {
+                iy += 1;
+            }
+            int region = ix * 4 + iy;
+
+            System.out.println(sensor.getName() + "; lyr=" + layer + "; mod=" + module + " -> xy[" + ix + "][" + iy + "] -> reg="+region);
+            sensorRegionMap.put(sensor,region);
+        }
+               
         resetOccupancyMap();
 
         // Setup the occupancy plots.
-        int region = 0;
         aida.tree().cd("/");
         for (SiSensor sensor : sensors) {
             IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName(), 640, 0, 639);
-            occuPlotter.region(region).plot(occupancyPlot);
-            ++region;
+            occuPlotter.region(sensorRegionMap.get(sensor)).plot(occupancyPlot);
         }
         occuPlotter.show();
     }
             
     public void process(EventHeader event) {
 
+        if (debug)
+            System.out.println("SensorOccupancyPlots.process");
+        
         // Increment event counter.
         ++eventCount;
 
         // Get RawTrackerHit collection from event.
         List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);        
         
-        // Loop over RawTrackerHit collection and increment occupancies.
+        // Increment hit count of each strip.
         for (RawTrackerHit hit : rawTrackerHits) {
-            // Increment hit counts for each strip.
             int[] strips = occupancyMap.get((SiSensor) hit.getDetectorElement());
             strips[hit.getIdentifierFieldValue("strip")] += 1;
         }
         
         if (eventCount % this.eventRefreshRate == 0) {
-
-            // Occupancy plots are redrawn each time.
-            occuPlotter.clearRegions();
-            int region = 0;
             for (SiSensor sensor : sensors) {
                 IHistogram1D sensorHist = aida.histogram1D(sensor.getName());
                 sensorHist.reset();
@@ -113,15 +155,12 @@
                         sensorHist.fill(i, stripOccupancy);
                     }
                 }
-                occuPlotter.region(region).plot(aida.histogram1D(sensor.getName()));
-                ++region;
             }
-            occuPlotter.show();
+            //occuPlotter.show();  
         }
     }    
     
     private void resetOccupancyMap() {
-        // Data structure for occupancy calculations by sensor.
         occupancyMap = new HashMap<SiSensor,int[]>();
         for (SiSensor sensor : sensors) {
             occupancyMap.put(sensor, new int[640]);

hps-java/src/main/java/org/lcsim/hps/monitoring
MonitoringConsumer.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- MonitoringConsumer.java	22 Mar 2012 22:03:35 -0000	1.1
+++ MonitoringConsumer.java	25 Mar 2012 07:23:20 -0000	1.2
@@ -35,12 +35,13 @@
 // TODO Integrate the ConnectionPanel so that it can be used for changing connection parameters.
 public class MonitoringConsumer {
     
-    // TODO Next two should be job options.
+    // TODO Next two should be job options or at least CL options.
     private static final String detectorName = "HPS-Test-JLAB-v4pt0";
-    private static final String lcsimXml = "/org/lcsim/hps/steering/EtTest.lcsim";
-            
+    //private static final String lcsimXml = "/org/lcsim/hps/steering/EtTest.lcsim";
+    private static final String lcsimXml = "/org/lcsim/hps/steering/EtSensorOccupancy.lcsim";
+
     private MonitoringGui gui;
-    private int eventCount;
+    //private int eventCount;
     
     private JobControlManager jobMgr; 
                    
@@ -53,7 +54,9 @@
     }
                 
     public void run(String[] args) {
-            
+        
+        boolean debug = false;
+        
         // Create ET system connection parameters.
         ConnectionParameters cn = new ConnectionParameters();
         try {
@@ -87,9 +90,6 @@
 
             // attach to new station
             EtAttachment att = sys.attach(stat);
-
-            // array of events
-            EtEvent[] mevs = null;
                                                                        
             // Job manager to run LCSim.
             jobMgr = new JobControlManager();
@@ -112,7 +112,7 @@
                         
             // Make the builder for creating LCSim events from EVIO data.
             LCSimEventBuilder eventBuilder = new LCSimEventBuilder(detectorName);
-            eventBuilder.setDebug(true);
+            eventBuilder.setDebug(false);
                                     
             // Show GUI.
             MonitoringGui.main(new String[]{});
@@ -120,28 +120,36 @@
             gui = MonitoringGui.getMonitoringGui();
             gui.setJobControlManager(jobMgr);             
             
-            ConnectionPanel.main(new String[]{});
+            //ConnectionPanel.main(new String[]{});
 
             // Start job timer.
             gui.updateJobStartTime();
-            
             // Event loop.
+            // array of events
+            EtEvent[] mevs = null;
+            int eventCount = 0;
             while (true) {
-                                
-                // Use these arguments for unlimited wait time.
-                //mevs = sys.getEvents(att, Mode.SLEEP, null, 0, chunk);                
-                boolean timedOut = false;
+                //System.out.println("top of EtEvent loop");
+                //boolean timedOut = false;
                 try {
-                    mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 10000000, cn.chunk);
+                    if (debug)
+                        System.out.println("waiting for EtEvents");
+                    //mevs = sys.getEvents(att, Mode.SLEEP, Modify.NOTHING, 0, cn.chunk);                    
+                    mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, 20000000, cn.chunk);
+                    eventCount += mevs.length;
+                    if (debug) {
+                        System.out.println("event count <" + eventCount + ">");
+                        System.out.println("got " + mevs.length + " EtEvents");
+                    }
                 } catch (EtTimeoutException e) {
-                    timedOut = true;
-                }              
+                //    timedOut = true;
+                //}              
                 // When timeout occurs, do cleanup and exit.
-                if (timedOut) {
-                                                            
+                //if (timedOut) {
+                    //System.out.println("timed out");                                        
                     // Call wrapper to Driver.endOfData() on DriverAdapter.
                     driverAdapter.finish(null);
-                                                            
+                    //System.exit(0);
                     // Exit after user presses enter.
                     System.out.println("Press ENTER to exit ...");
                     System.console().readLine();
@@ -150,9 +158,10 @@
                                            
                 // Loop over retrieved EtEvents.
                 for (EtEvent mev : mevs) {
-                    
+                    gui.updateEventCount();                    
                     // Increment GUI event count.
-                    gui.incrEventCount();
+                    //if (gui.)
+                    //
                     
                     // Get EvioEvent and check for errors.
                     ByteBuffer buf = mev.getDataBuffer();
@@ -161,21 +170,34 @@
                     try {
                         evioEvent = reader.parseNextEvent();
                     } catch (java.nio.BufferUnderflowException e) {
-                        System.out.println("Caught underflow!");
+                        if (debug)
+                            System.out.println("Caught underflow!");
                     }
                     if (evioEvent == null) {
-                        System.out.println("Failed to build EVIO event <" + eventCount + ">.  Skipping this EtEvent!");
+                        if (debug)
+                            System.out.println("Failed to build EVIO event.  Skipping this EtEvent!");
                         continue;
                     }
-
+                   
                     // Create LCSim event from EVIO data.
+                    if (debug)
+                        System.out.println("building lcsim event");
+                    long lcsimStartTime = System.nanoTime();
                     EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
 
                     // Make a new event for DriverAdapter.
                     RecordSuppliedEvent loopEvent = new RecordSuppliedEvent(new Object(), lcsimEvent);
 
                     // Call process methods via Driver Adapter.
+                    if (debug)
+                        System.out.println("running lcsim");
                     driverAdapter.recordSupplied(loopEvent);                 
+                    long lcsimEndTime = System.nanoTime();
+                    long lcsimEventTime = lcsimEndTime - lcsimStartTime;
+                    if (debug)
+                        System.out.println("lcsim proc time [ns]: " + lcsimEventTime);
+                    
+                    //System.out.println("done running lcsim");
                     
                     // Update elapsed time.
                     gui.updateElapsedTime();
@@ -183,7 +205,8 @@
                     // Update the average event rate in the GUI.
                     gui.updateAverageEventRate();                    
                 }
-                                                
+                if (debug)
+                    System.out.println("putting events back");                                
                 // Put events back into the ET system.
                 sys.putEvents(att, mevs);                
             }

hps-java/src/main/java/org/lcsim/hps/monitoring
MonitoringGui.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- MonitoringGui.java	22 Mar 2012 22:03:35 -0000	1.1
+++ MonitoringGui.java	25 Mar 2012 07:23:20 -0000	1.2
@@ -23,19 +23,25 @@
 
 public class MonitoringGui extends JPanel implements ActionListener {
 
-    private JButton resetButton;
-    private JButton saveButton;
-    private JButton quitButton;
     private JTextField eventCounterField;
     private JTextField elapsedTimeField;
     //private JTextField eventRateField;
     private JTextField avgEventRateField;
+    private JTextField refreshField;
     private DecimalFormat rateFormat = new DecimalFormat("#.##");
-        
+
+    private JButton resetButton;
+    private JButton saveButton;
+    private JButton quitButton;
+    
     private static JobControlManager jobMgr;    
     private static MonitoringGui monitoringGui;
     
+    // Refresh every 1000 events by default.
+    private int eventRefresh  = 1000;
+    
     private long jobStartTime;
+    private int eventCount;
     
     MonitoringGui() {
 
@@ -131,6 +137,24 @@
         avgEventRateField.setEditable(false);
         avgEventRateField.setBackground(Color.WHITE);
         fieldsPanel.add(avgEventRateField, c);
+        
+        c = new GridBagConstraints();
+        c.gridx = 0;
+        c.gridy = 3;
+        c.anchor = GridBagConstraints.WEST;
+        JLabel refreshLabel = new JLabel("Event Refresh:");
+        refreshLabel.setHorizontalAlignment(JLabel.LEFT);
+        fieldsPanel.add(refreshLabel, c);
+        
+        c = new GridBagConstraints();
+        c.gridx = 1;
+        c.gridy = 3;
+        c.anchor = GridBagConstraints.EAST;
+        refreshField = new JTextField(Integer.toString(eventRefresh), 4);
+        refreshField.setHorizontalAlignment(JTextField.RIGHT);
+
+        fieldsPanel.add(refreshField, c);
+        
 
         // Button padding.
         Insets buttonInsets = new Insets(1, 1, 1, 1);
@@ -168,7 +192,7 @@
         quitButton.setToolTipText("Quit the job.");
         buttonsPanel.add(quitButton, c);
     }
-
+    
     public static MonitoringGui getMonitoringGui() {
         return MonitoringGui.monitoringGui;
     }
@@ -177,27 +201,48 @@
         MonitoringGui.jobMgr = jobMgr;
     }
     
-    public void incrEventCount() {
-        int e = Integer.parseInt(eventCounterField.getText());
-        e += 1;
-        eventCounterField.setText(Integer.toString(e));
+    public int getEventCount() {
+        return eventCount;
+    }
+    
+    public int getEventRefresh() {
+        return Integer.parseInt(refreshField.getText());
+    }
+    
+    public void updateEventCount() {
+        ++eventCount;
+        if (updateEvent()) {
+            eventCounterField.setText(Integer.toString(eventCount));
+        }
     }
     
     public void updateJobStartTime() {
         this.jobStartTime = System.currentTimeMillis();
     }
     
-    public void updateAverageEventRate() {
-        double avgProcTime = (System.currentTimeMillis() - jobStartTime) / Double.parseDouble(eventCounterField.getText());
-        double avgEventRate = 1000 / avgProcTime;
-        avgEventRateField.setText(rateFormat.format(avgEventRate));
+    public boolean updateEvent() {
+        return (eventCount % getEventRefresh()) == 0; 
     }
     
+    public void updateAverageEventRate() {
+        if (updateEvent()) {
+            double jobTime = System.currentTimeMillis() - jobStartTime;
+            if (jobTime > 0) {
+                double avgProcTime = jobTime / eventCount;
+                double avgEventRate = 10e3 / avgProcTime;
+                avgEventRateField.setText(rateFormat.format(avgEventRate));
+            }
+        }
+    }
+        
     public void updateElapsedTime() {    
-        this.elapsedTimeField.setText(Long.toString(System.currentTimeMillis() - jobStartTime));
+        if (updateEvent()) {
+            this.elapsedTimeField.setText(Long.toString(System.currentTimeMillis() - jobStartTime));
+        }
     }
-
+        
     private void resetEventCount() {
+        eventCount = 0;
         eventCounterField.setText("0");
     }
     

hps-java/src/main/resources/org/lcsim/hps/steering
EtSensorOccupancy.lcsim 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- EtSensorOccupancy.lcsim	24 Mar 2012 00:06:49 -0000	1.1
+++ EtSensorOccupancy.lcsim	25 Mar 2012 07:23:21 -0000	1.2
@@ -11,19 +11,17 @@
     <execute>
         <driver name="SVTSetupDriver"/>
         <driver name="EventMarkerDriver"/>
-        <driver name="OccupancyPlots"
+        <driver name="OccupancyPlots"/>
     </execute>
     <drivers>
-        <driver name="SVTSetupDriver"
-                type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">   
+        <driver name="SVTSetupDriver" type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">   
         </driver>
-        <driver name="EventMarkerDriver"
-                type="org.lcsim.job.EventMarkerDriver">
-            <eventInterval>1</eventInterval>
+        <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+            <eventInterval>10000</eventInterval>
         </driver>
-        <driver name="OccupancyPlots">
-              type="org.lcsim.hps.monitoring.SensorOccupancyPlotsDriver">
-            <eventRefreshRate>10</eventRefreshRate>
+        <driver name="OccupancyPlots" type="org.lcsim.hps.monitoring.SensorOccupancyPlotsDriver">
+            <debug>false</debug>
+            <eventRefreshRate>4000</eventRefreshRate>
         </driver>
     </drivers>
-</lcsim>
+</lcsim>
\ No newline at end of file
CVSspam 0.2.12


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