LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  March 2015

HPS-SVN March 2015

Subject:

r2434 - in /java/branches/monitoring-app-dev: ./ src/main/java/org/hps/monitoring/application/ src/main/java/org/hps/monitoring/application/util/ src/main/resources/org/hps/monitoring/config/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 13 Mar 2015 21:45:38 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1052 lines)

Author: [log in to unmask]
Date: Fri Mar 13 14:45:30 2015
New Revision: 2434

Log:
Various updates on monitoring dev branch.

Added:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtEventFilter.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PhysicsSyncEventStation.java
      - copied, changed from r2425, java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EvioDAQConfigStation.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PreStartEtStation.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/RunnableEtStation.java
Removed:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTable.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EvioDAQConfigStation.java
Modified:
    java/branches/monitoring-app-dev/pom.xml
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/RunPanel.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/MonitoringApplicationEventBuilder.java
    java/branches/monitoring-app-dev/src/main/resources/org/hps/monitoring/config/default_config.prop

Modified: java/branches/monitoring-app-dev/pom.xml
 =============================================================================
--- java/branches/monitoring-app-dev/pom.xml	(original)
+++ java/branches/monitoring-app-dev/pom.xml	Fri Mar 13 14:45:30 2015
@@ -111,6 +111,10 @@
         </dependency>
         <dependency>
             <groupId>org.hps</groupId>
+            <artifactId>hps-ecal-recon</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hps</groupId>
             <artifactId>hps-monitoring-drivers</artifactId>
         </dependency>       
         <dependency>
@@ -134,6 +138,16 @@
             <groupId>org.freehep</groupId>
             <artifactId>freehep-jaida-remote</artifactId>
             <version>3.4.11</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jdom</groupId>
+                    <artifactId>jdom</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-math</groupId>
+                    <artifactId>commons-math</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
-</project>
+</project>

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java	Fri Mar 13 14:45:30 2015
@@ -1,6 +1,7 @@
 package org.hps.monitoring.application;
 
 import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableRowSorter;
 
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectCollection;
@@ -18,7 +19,27 @@
     int columnCount;
     int rowCount;
     String[] columnNames;
+    Class<?>[] columnTypes;
     DatabaseConditionsManager manager;
+    
+    /*
+    static class ConditionsCollectionTableRowSorter extends TableRowSorter<ConditionsCollectionTableModel> {
+        
+        ConditionsCollectionTableModel model;
+        
+        ConditionsCollectionTableRowSorter(ConditionsCollectionTableModel model) {
+            this.model = model;
+        }
+        
+        protected boolean useToString(int column) {
+            if (model.getColumnClass(column).equals(String.class)) {
+                return true;
+            } else {
+                return false;
+            }
+        }       
+     }
+     */
 
     ConditionsCollectionTableModel(DatabaseConditionsManager manager, ConditionsObjectCollection<?> collection) {
         
@@ -30,20 +51,27 @@
         TableMetaData tableInfo = manager.findTableMetaData(tableName);
 
         // Set column names and count from table meta data.
-        setupColumns(tableInfo);
+        setupColumns(tableInfo);        
     }
 
     private void setupColumns(TableMetaData tableInfo) {
+
         int fieldNameCount = tableInfo.getFieldNames().length;
         columnCount = fieldNameCount + 1;
+        
+        columnTypes = new Class<?>[columnCount];                
         columnNames = new String[columnCount];
+        
         columnNames[0] = "id";
+        columnTypes[0] = int.class;
+        
         for (int i = 0; i < fieldNameCount; i++) {
-            columnNames[i + 1] = tableInfo.getFieldNames()[i];
-            System.out.println("column " + (i + 1) + " = " + tableInfo.getFieldNames()[i]);
+            String fieldName = tableInfo.getFieldNames()[i];
+            columnNames[i + 1] = fieldName;
+            columnTypes[i + 1] = tableInfo.getFieldType(fieldName);
+            System.out.println("column " + (i + 1) + " = " + tableInfo.getFieldNames()[i] + " with type " + columnTypes[i + 1]);
         }
-
-        System.out.println("column count set to " + columnCount);
+        System.out.println("column count set to " + columnCount);        
     }
 
     @Override
@@ -60,6 +88,20 @@
     public String getColumnName(int columnIndex) {
         return columnNames[columnIndex];
     }
+    
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        Class<?> columnClass = columnTypes[columnIndex];
+        if (columnClass.equals(int.class)) {
+            return Integer.class;
+        } else if (columnClass.equals(float.class)) {
+            return Float.class;
+        } else if (columnClass.equals(double.class)) {
+            return Double.class;
+        } else {
+            return columnClass;
+        }
+    }
 
     @Override
     public Object getValueAt(int rowIndex, int columnIndex) {

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java	Fri Mar 13 14:45:30 2015
@@ -4,7 +4,6 @@
 package org.hps.monitoring.application;
 
 import java.awt.BorderLayout;
-import java.awt.Dimension;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -13,11 +12,14 @@
 import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableModel;
+import javax.swing.table.TableRowSorter;
 
 import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsRecord;
@@ -33,7 +35,7 @@
 public class ConditionsPanel extends JPanel {
     
     JList<String> conditionsList = new JList<String>();
-    JTable conditionsTable = new ConditionsCollectionTable();
+    JTable conditionsTable = new JTable();
     Map<String, ConditionsCollectionTableModel> tableModels;
     
     ConditionsPanel() {
@@ -44,19 +46,20 @@
             @Override
             public void valueChanged(ListSelectionEvent e) {
                 String tableName = (String) conditionsList.getSelectedValue();
-                conditionsTable.setModel(tableModels.get(tableName));
+                TableModel model = tableModels.get(tableName);
+                conditionsTable.setModel(model);
+                conditionsTable.setRowSorter(new TableRowSorter(model));
                 conditionsTable.revalidate();
             }            
         });
         
-        //conditionsList.setPreferredSize(new Dimension(150, 400));                
-        JScrollPane pane = new JScrollPane(conditionsTable);
+        //conditionsTable.setAutoCreateRowSorter(true);
         conditionsTable.setModel(new DefaultTableModel());
-        //conditionsTable.setPreferredSize(new Dimension(400, 400));
-        //pane.setPreferredSize(new Dimension(300, 400));
+               
+        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, conditionsList, new JScrollPane(conditionsTable));
+        splitPane.setResizeWeight(0.6);
         
-        add(conditionsList, BorderLayout.WEST);
-        add(pane, BorderLayout.EAST);
+        add(splitPane);
     }
     
     class ConditionsPanelListener implements ConditionsListener {

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java	Fri Mar 13 14:45:30 2015
@@ -14,7 +14,8 @@
 import org.hps.monitoring.application.model.ConnectionStatus;
 import org.hps.monitoring.application.model.SteeringType;
 import org.hps.monitoring.application.util.EtSystemUtil;
-import org.hps.monitoring.application.util.EvioDAQConfigStation;
+import org.hps.monitoring.application.util.PhysicsSyncEventStation;
+import org.hps.monitoring.application.util.PreStartEtStation;
 import org.hps.monitoring.subsys.et.EtSystemMonitor;
 import org.hps.monitoring.subsys.et.EtSystemStripCharts;
 import org.hps.record.LCSimEventBuilder;
@@ -25,6 +26,7 @@
 import org.hps.record.enums.DataSourceType;
 import org.hps.record.et.EtConnection;
 import org.hps.record.evio.EvioDetectorConditionsProcessor;
+import org.jlab.coda.et.EtSystem;
 import org.jlab.coda.et.exception.EtClosedException;
 import org.jlab.coda.et.exception.EtException;
 import org.lcsim.conditions.ConditionsListener;
@@ -46,6 +48,7 @@
     List<CompositeRecordProcessor> processors;
     List<Driver> drivers;
     List<ConditionsListener> conditionsListeners;
+    int stationPosition;
 
     /**
      * This class is used to organize the objects for an event processing session.
@@ -56,6 +59,8 @@
         CompositeLoop loop;
         EventProcessingThread processingThread;
         Thread sessionWatchdogThread;
+        Thread configThread;
+        Thread preStartThread;
         EtConnection connection;
     }
 
@@ -65,13 +70,23 @@
      * @param application The current monitoring application.
      * @param processors A list of processors to add after configuration is performed.
      */
-    EventProcessing(MonitoringApplication application, List<CompositeRecordProcessor> processors, List<Driver> drivers, List<ConditionsListener> conditionsListeners) {
+    EventProcessing(
+            MonitoringApplication application, 
+            List<CompositeRecordProcessor> processors, 
+            List<Driver> drivers, 
+            List<ConditionsListener> conditionsListeners) {
         this.application = application;
         this.sessionState = new SessionState();
         this.logger = MonitoringApplication.logger;
         this.processors = processors;
         this.drivers = drivers;
         this.conditionsListeners = conditionsListeners;
+        this.stationPosition = application.configurationModel.getStationPosition();
+    }
+    
+    int getNextStationPosition() {
+        this.stationPosition += 1;
+        return this.stationPosition;        
     }
 
     /**
@@ -419,8 +434,12 @@
                 // Create the main ET system connection.
                 createEtConnection();
 
-                // Add an attachment that listens for DAQ configuration changes.
-                createEvioDAQConfigStation();
+                // Add an attachment that listens for DAQ configuration changes via physics SYNC events.
+                createPhysicsSyncStation();
+                
+                // Add ann attachment that listens for PRESTART events.
+                createPreStartStation();
+                
             } catch (Exception e) {
                 throw new IOException(e);
             }
@@ -459,13 +478,35 @@
     /**
      * Create the ET that listens for DAQ configuration change via SYNC events.
      */
-    void createEvioDAQConfigStation() {
-        logger.fine("starting EVIO DAQ config station ...");
-        EvioDAQConfigStation configStation = new EvioDAQConfigStation(this.sessionState.connection);
-        configStation.setup();
-        Thread configThread = new Thread(configStation);
-        configThread.start();
-        logger.fine("EVIO DAQ config station started");
+    void createPhysicsSyncStation() {
+        logger.fine("creating physics SYNC station ...");       
+        PhysicsSyncEventStation configStation = new PhysicsSyncEventStation(
+                this.sessionState.connection.getEtSystem(),
+                this.sessionState.connection.getEtStation().getName() + "_PhysicsSyncStation",
+                getNextStationPosition());
+        sessionState.configThread = new Thread(configStation);
+        sessionState.configThread.start();
+        logger.fine("physics SYNC station created");
+    }
+    
+    /**
+     * Create the ET station that listens for GO events in order to initialize the conditions system.
+     */
+    void createPreStartStation() {
+        logger.fine("creating PRESTART station ...");
+        String detectorName = this.application.configurationModel.getDetectorName();
+        EtSystem system = this.sessionState.connection.getEtSystem();
+        String stationName = this.sessionState.connection.getEtStation().getName() + "_GoStation";
+        int order = getNextStationPosition();
+        PreStartEtStation preStartStation = new PreStartEtStation(
+                detectorName, 
+                system, 
+                stationName, 
+                order);
+
+        sessionState.preStartThread = new Thread(preStartStation);
+        sessionState.preStartThread.start();
+        logger.fine("PRESTART station created");
     }
 
     /**
@@ -474,15 +515,27 @@
      */
     synchronized void disconnect() {
 
-        logger.fine("disconnecting");
-
+        logger.fine("disconnecting ET system ...");
+        
+        if (sessionState.configThread != null) {
+            if (sessionState.configThread.isAlive()) {
+                sessionState.configThread.interrupt();
+            }
+        }
+        
+        if (sessionState.preStartThread != null) {
+            if (sessionState.preStartThread.isAlive()) {
+                sessionState.preStartThread.interrupt();
+            }
+        }
+        
         // Cleanup the ET connection.
         closeEtConnection();
 
         // Change application state to disconnected.
         application.connectionModel.setConnectionStatus(ConnectionStatus.DISCONNECTED);
 
-        logger.fine("disconnected");
+        logger.fine("ET system disconnected successfully");
     }
 
     /**

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java	Fri Mar 13 14:45:30 2015
@@ -3,11 +3,9 @@
 import java.awt.BorderLayout;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
-import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
 import java.awt.Rectangle;
 
-import javax.swing.BoxLayout;
-import javax.swing.JComponent;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -40,14 +38,10 @@
     DataSourceComboBox dataSourceComboBox;
     
     SettingsDialog settingsDialog;
-    
-    // Proportional layout parameters relative to the screen size.
-    static final double FULL_SIZE = 1.0;
-    static final double TOP_PANEL_HEIGHT = 0.05;
-    static final double BOTTOM_PANEL_HEIGHT = FULL_SIZE - TOP_PANEL_HEIGHT;
-    static final double LEFT_PANEL_WIDTH = 0.3;
-    static final double RIGHT_PANEL_WIDTH = FULL_SIZE - LEFT_PANEL_WIDTH;
-    static final double PLOT_PANEL_HEIGHT = 0.8;
+       
+    static Rectangle bounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
+    static int pixWidthMax = (int) bounds.getWidth();
+    static int pixHeightMax = (int) bounds.getHeight();
     
     /**
      * 
@@ -62,16 +56,15 @@
         // Create the content panel.
         JPanel contentPanel = new JPanel();
         setContentPane(contentPanel);
-        contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
+        contentPanel.setLayout(new BorderLayout());
         contentPanel.setOpaque(true);
-        setProportionalSize(contentPanel, FULL_SIZE, FULL_SIZE);
-        
+        contentPanel.setPreferredSize(new Dimension(pixWidthMax, pixHeightMax));
+                
         // Create the top panel.
         JPanel topPanel = new JPanel();
         topPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 0));
-        setProportionalSize(topPanel, FULL_SIZE, TOP_PANEL_HEIGHT);
-        contentPanel.add(topPanel);
-        
+        contentPanel.add(topPanel, BorderLayout.NORTH);
+                
         // Create the connection status panel.
         JPanel connectionPanel = new ConnectionStatusPanel(application.connectionModel);
         topPanel.add(connectionPanel);
@@ -87,7 +80,6 @@
         
         // Add vertical separator.
         sep = new JSeparator(SwingConstants.VERTICAL);
-        sep.setPreferredSize(new Dimension(5, topPanel.getPreferredSize().height));
         topPanel.add(sep);
         
         // Add the data source combo box.
@@ -97,14 +89,12 @@
         // Create the bottom panel.
         JPanel bottomPanel = new JPanel();
         bottomPanel.setLayout(new BorderLayout());
-        setProportionalSize(bottomPanel, FULL_SIZE, BOTTOM_PANEL_HEIGHT);
-        contentPanel.add(bottomPanel);
-                                
+        contentPanel.add(bottomPanel, BorderLayout.CENTER);
+                                        
         // Create the left panel.
         JPanel leftPanel = new JPanel();
         leftPanel.setLayout(new BorderLayout());
-        setProportionalSize(leftPanel, LEFT_PANEL_WIDTH, FULL_SIZE);
-                        
+                            
         // Create the run dashboard.
         runPanel = new RunPanel(application.runModel);
 
@@ -129,7 +119,7 @@
         
         // Vertical split pane in left panel.
         leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, runPanel, tableTabbedPane);
-        leftSplitPane.setResizeWeight(0.5);
+        leftSplitPane.setResizeWeight(1.0);
         leftPanel.add(leftSplitPane, BorderLayout.CENTER);
                                 
         // Create the right panel.
@@ -141,55 +131,31 @@
                 
         // Create the plot panel.
         plotPanel = new PlotPanel();
-        plotPanel.setVisible(true); // DEBUG
-        setProportionalSize(plotPanel, RIGHT_PANEL_WIDTH, PLOT_PANEL_HEIGHT);
         
         // Create the right panel vertical split pane for displaying plots and their information and statistics.
         rightSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, plotPanel, plotInfoPanel);
-        setProportionalSize(rightSplitPane, RIGHT_PANEL_WIDTH, FULL_SIZE);
-        rightSplitPane.setResizeWeight(0.8);
+        rightSplitPane.setResizeWeight(0.7);
         rightPanel.add(rightSplitPane, BorderLayout.CENTER);
                        
         // Create the main horizontal split pane for dividing the left and right panels.
         mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);
-        mainSplitPane.setResizeWeight(0.15);
+        mainSplitPane.setResizeWeight(0.2);
         bottomPanel.add(mainSplitPane, BorderLayout.CENTER);
         
         // Create the menu bar.
         menu = new MenuBar(application.configurationModel, application.connectionModel, application);
         setJMenuBar(menu);
         dataSourceComboBox.addActionListener(menu);
-                        
+        
+        // Setup the settings dialog box (invisible until activated).
+        settingsDialog = new SettingsDialog(application.configurationModel, application);
+        
         // Setup the frame now that all components have been added.        
         pack();
         setExtendedState(JFrame.MAXIMIZED_BOTH);
-        setVisible(true);
-        
-        // Setup the settings dialog box.
-        settingsDialog = new SettingsDialog(application.configurationModel, application);
+        setVisible(true); 
     }
-    
-    /**
-     * Set the size of a Swing component using proportions of the current screen bounds.
-     * @param component The component to resize.
-     * @param scaleX The X scaling (must be between 0 and 1).
-     * @param scaleY The Y scaling (must be between 0 and 1).
-     * @param setSize Call the setSize method as well as setPreferredSize (which is the default).
-     * @return
-     */
-    void setProportionalSize(JComponent component, double scaleX, double scaleY) {                    
-        GraphicsConfiguration graphics = this.getGraphicsConfiguration();        
-        Rectangle bounds = graphics.getBounds();        
-        if (scaleX < 0 || scaleX > 1) {
-            throw new IllegalArgumentException("scaleX must be > 0 and <= 1.");
-        }
-        if (scaleY < 0 || scaleY > 1) {
-            throw new IllegalArgumentException("scaleY must be > 0 and <= 1.");
-        }
-        Dimension scaledDimension = new Dimension((int)(bounds.getWidth() * scaleX), (int)(bounds.getHeight() * scaleY));
-        component.setPreferredSize(scaledDimension);
-    }           
-    
+             
     /**
      * Restore default window settings.
      */

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/RunPanel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/RunPanel.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/RunPanel.java	Fri Mar 13 14:45:30 2015
@@ -1,8 +1,6 @@
 package org.hps.monitoring.application;
 
-import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
+import java.awt.FlowLayout;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.text.DecimalFormat;
@@ -11,10 +9,7 @@
 import java.util.Timer;
 import java.util.TimerTask;
 
-import javax.swing.BorderFactory;
 import javax.swing.JPanel;
-import javax.swing.border.EtchedBorder;
-import javax.swing.border.TitledBorder;
 
 import org.hps.monitoring.application.model.RunModel;
 import org.hps.record.composite.CompositeRecord;
@@ -58,31 +53,20 @@
     
     private void build() {
         
-        setLayout(new GridBagLayout());
-
-        TitledBorder titledBorder = BorderFactory.createTitledBorder(
-                BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Run Summary");
-        setBorder(titledBorder);
-
-        GridBagConstraints c = new GridBagConstraints();
-        c.anchor = GridBagConstraints.WEST;
-        c.gridx = 0;                
-        add(runNumberField, c);
-        add(startDateField, c);
-        add(endDateField, c);
-        add(lengthField, c);
-        add(totalEventsField, c);
-        
-        c = new GridBagConstraints();
-        c.gridx = 1;
-        add(elapsedTimeField, c);
-        add(eventsReceivedField, c);
-        add(dataReceivedField, c);
-        add(eventNumberField, c);
-        add(dataRateField, c);
-        add(eventRateField, c);
-
-        setMinimumSize(new Dimension(400, 240));
+        setLayout(new FlowLayout(FlowLayout.LEADING));
+
+        add(runNumberField);
+        add(startDateField);
+        add(endDateField);
+        add(lengthField);
+        add(totalEventsField);
+        
+        add(elapsedTimeField);
+        add(eventsReceivedField);
+        add(dataReceivedField);
+        add(eventNumberField);
+        add(dataRateField);
+        add(eventRateField);
     }
     
     public void setModel(RunModel runModel) {

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtEventFilter.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtEventFilter.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtEventFilter.java	Fri Mar 13 14:45:30 2015
@@ -0,0 +1,27 @@
+package org.hps.monitoring.application.util;
+
+interface EventTagFilter {
+
+    boolean accept(int eventTag);
+    
+    public static final class AcceptAllFilter implements EventTagFilter {
+        public boolean accept(int eventTag) {
+            // Accept any event type.
+            return true;
+        }
+    }
+    
+    public static final class SyncTagFilter implements EventTagFilter {
+        public boolean accept(int eventTag) {
+            // Physics event with sync information (DAQ config) has bit 6 set.
+            return (((eventTag >> 6) & 1) == 1);
+        }
+    }
+    
+    public static final class PhysicsTagFilter implements EventTagFilter {
+        public boolean accept(int eventTag) {
+            // Physics event always has bit 7 set.
+            return (((eventTag >> 7) & 1) == 1);
+        }
+    }
+}

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/MonitoringApplicationEventBuilder.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/MonitoringApplicationEventBuilder.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/MonitoringApplicationEventBuilder.java	Fri Mar 13 14:45:30 2015
@@ -12,7 +12,6 @@
 /**
  * Build LCSim events from EVIO data.
  *
- * @author Sho Uemura <[log in to unmask]>
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public class MonitoringApplicationEventBuilder extends LCSimEngRunEventBuilder {

Copied: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PhysicsSyncEventStation.java (from r2425, java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EvioDAQConfigStation.java)
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EvioDAQConfigStation.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PhysicsSyncEventStation.java	Fri Mar 13 14:45:30 2015
@@ -3,21 +3,19 @@
  */
 package org.hps.monitoring.application.util;
 
+import java.io.IOException;
 import java.util.List;
 
 import org.hps.evio.TriggerConfigEvioReader;
-import org.hps.readout.ecal.daqconfig.ConfigurationManager;
-import org.hps.readout.ecal.daqconfig.EvioDAQParser;
-import org.hps.record.et.EtConnection;
-import org.jlab.coda.et.EtAttachment;
-import org.jlab.coda.et.EtConstants;
+import org.hps.monitoring.application.util.EventTagFilter.SyncTagFilter;
+import org.hps.monitoring.application.util.RunnableEtStation.RunnableEtStationConfiguration;
+import org.hps.recon.ecal.daqconfig.ConfigurationManager;
+import org.hps.recon.ecal.daqconfig.EvioDAQParser;
+import org.hps.record.evio.EvioEventConstants;
 import org.jlab.coda.et.EtEvent;
-import org.jlab.coda.et.EtStation;
-import org.jlab.coda.et.EtStationConfig;
-import org.jlab.coda.et.enums.Mode;
-import org.jlab.coda.et.enums.Modify;
-import org.jlab.coda.jevio.BaseStructure;
+import org.jlab.coda.et.EtSystem;
 import org.jlab.coda.jevio.EvioEvent;
+import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
 import org.lcsim.event.base.BaseLCSimEvent;
 
@@ -28,107 +26,53 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-public class EvioDAQConfigStation implements Runnable {
-    
-    private static final String TRIGGER_CONFIG = "TriggerConfig";
-    EtConnection connection;
-    EtAttachment attachment;
+public class PhysicsSyncEventStation extends RunnableEtStation {
+           
+    private static final String TRIGGER_CONFIG = "TriggerConfig";    
     TriggerConfigEvioReader configReader = new TriggerConfigEvioReader();
-    EventTagFilter filter = new PhysicsTagFilter();
+            
+    public PhysicsSyncEventStation(EtSystem system, String name, int order) {   
+        config = new RunnableEtStationConfiguration();
+        config.order = order;
+        config.name = name;
+        config.prescale = 1;
+        config.readEvents = 100;
+        config.system = system;
+        config.validate();
         
-    public EvioDAQConfigStation(EtConnection connection) {
-        this.connection = connection;
+        filter = new SyncTagFilter();
     }
-    
-    public EvioDAQConfigStation(EtConnection connection, EventTagFilter filter) {
-        this.connection = connection;
-        this.filter = filter;
-    }
-    
-    public void setup() {
-        EtStationConfig stationConfig = new EtStationConfig();
+        
+    public void processEvent(EtEvent event) {
+        int eventTag = event.getControl()[0];
+        System.out.println(this.config.name + " accepted event tag: " + eventTag);
+        EvioEvent evioEvent = null;
         try {
-            stationConfig.setFlowMode(EtConstants.stationSerial);
-            stationConfig.setBlockMode(EtConstants.stationNonBlocking);
-            stationConfig.setPrescale(1);
-      
-            EtStation station = connection.getEtSystem().createStation(
-                stationConfig,
-                connection.getEtStation().getName() + "_EvioDAQConfigStation",
-                connection.getEtSystem().getStationPosition(connection.getEtStation()) + 1);
-            
-            attachment = connection.getEtSystem().attach(station);
-            
-        } catch (Exception e) {
+            System.out.println("parsing EVIO event ...");
+            evioEvent = new EvioReader(event.getDataBuffer()).parseNextEvent();
+        } catch (IOException | EvioException e) {
             throw new RuntimeException(e);
         }
-    }
-    
-    public void run() {
-        for(;;) {
-            try {
-                EtEvent[] events = 
-                    connection.getEtSystem().getEvents(attachment, Mode.SLEEP, Modify.NOTHING, 0, 100);
-                for (EtEvent event : events) {
-                    int eventTag = event.getControl()[0];
-                    if (filter.accept(eventTag)) {
-                        EvioEvent evioEvent = new EvioReader(event.getDataBuffer()).parseNextEvent();     
-                        BaseLCSimEvent lcsimEvent = new BaseLCSimEvent(9999, 9999, "dummy", 0, false);
-                        configReader.getDAQConfig(evioEvent, lcsimEvent);
-                        if (lcsimEvent.hasCollection(EvioDAQParser.class, TRIGGER_CONFIG)) {
-                            List<EvioDAQParser> configList = lcsimEvent.get(EvioDAQParser.class, TRIGGER_CONFIG);
-                            if (!configList.isEmpty()) {
-                                ConfigurationManager.updateConfiguration(configList.get(0));
-                            }
-                            break;
-                        }
-                     }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                break;
-            }
-        }
-        if (connection.getEtSystem().alive()) {
-            disconnect();
-        }
-    }
-    
-    static interface EventTagFilter {
-        boolean accept(int eventTag);
-    }
-    
-    static class SyncTagFilter implements EventTagFilter {
-        public boolean accept(int eventTag) {
-            return (((eventTag >> 6) & 1) == 1);
-        }
-    }
-    
-    static class PhysicsTagFilter implements EventTagFilter {
-        public boolean accept(int eventTag) {
-            return (((eventTag >> 7) & 1) == 1);
-        }
-    }
-    
-    static boolean hasConfigBank(EvioEvent evioEvent) {
-        for (BaseStructure bank : evioEvent.getChildrenList()) {
-            if (bank.getChildCount() <= 0)
-                continue;
-            for (BaseStructure subBank : bank.getChildrenList()) {
-                if (subBank.getHeader().getTag() == EvioDAQParser.BANK_TAG) {
-                    return true;
+        System.out.println("dumping EVIO event ...");
+        System.out.println(evioEvent.toXML());
+        try {
+            System.out.println("done dumping EVIO event");
+            BaseLCSimEvent lcsimEvent = new BaseLCSimEvent(9999, 9999, "dummy", 0, false);
+            System.out.println("reading DAQ config ...");
+            configReader.getDAQConfig(evioEvent, lcsimEvent);
+            System.out.println("DAQ config read okay!");
+            if (lcsimEvent.hasCollection(EvioDAQParser.class, TRIGGER_CONFIG)) {
+                System.out.println("found config in dummy lcsim event");
+                List<EvioDAQParser> configList = lcsimEvent.get(EvioDAQParser.class, TRIGGER_CONFIG);
+                if (!configList.isEmpty()) {
+                    System.out.println("updating config in ConfigurationManager ...");
+                    ConfigurationManager.updateConfiguration(configList.get(0));
+                    System.out.println("config updated in manager!");
                 }
             }
-        }
-        return false;
-    }
-    
-    public void disconnect() {        
-        try {
-            connection.getEtSystem().wakeUpAttachment(attachment);
-            connection.getEtSystem().detach(attachment);
         } catch (Exception e) {
+            System.err.println("Failed to load DAQ config from sync event ...");
             e.printStackTrace();
         }
-    }        
+    }       
 }

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PreStartEtStation.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PreStartEtStation.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/PreStartEtStation.java	Fri Mar 13 14:45:30 2015
@@ -0,0 +1,47 @@
+package org.hps.monitoring.application.util;
+
+import java.io.IOException;
+
+import org.hps.record.evio.EvioDetectorConditionsProcessor;
+import org.hps.record.evio.EvioEventConstants;
+import org.jlab.coda.et.EtEvent;
+import org.jlab.coda.et.EtSystem;
+import org.jlab.coda.jevio.EvioEvent;
+import org.jlab.coda.jevio.EvioException;
+import org.jlab.coda.jevio.EvioReader;
+
+/**
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class PreStartEtStation extends RunnableEtStation {
+
+    EvioDetectorConditionsProcessor processor;
+
+    public PreStartEtStation(String detectorName, EtSystem system, String name, int order) {
+
+        if (detectorName == null) {
+            throw new IllegalArgumentException("detectorName is null");
+        }
+
+        config = new RunnableEtStationConfiguration();
+        config.eventType = EvioEventConstants.GO_EVENT_TAG;
+        config.order = order;
+        config.name = name;
+        config.prescale = 1;
+        config.readEvents = 1;
+        config.system = system;
+        config.validate();
+
+        processor = new EvioDetectorConditionsProcessor(detectorName);
+    }
+
+    public void processEvent(EtEvent event) {
+        EvioEvent evioEvent = null;
+        try {
+            evioEvent = new EvioReader(event.getDataBuffer()).parseNextEvent();
+            processor.startRun(evioEvent);
+        } catch (IOException | EvioException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/RunnableEtStation.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/RunnableEtStation.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/RunnableEtStation.java	Fri Mar 13 14:45:30 2015
@@ -0,0 +1,147 @@
+/**
+ * 
+ */
+package org.hps.monitoring.application.util;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import org.hps.monitoring.application.util.EventTagFilter.AcceptAllFilter;
+import org.jlab.coda.et.EtAttachment;
+import org.jlab.coda.et.EtConstants;
+import org.jlab.coda.et.EtEvent;
+import org.jlab.coda.et.EtStation;
+import org.jlab.coda.et.EtStationConfig;
+import org.jlab.coda.et.EtSystem;
+import org.jlab.coda.et.enums.Mode;
+import org.jlab.coda.et.enums.Modify;
+import org.jlab.coda.et.exception.EtClosedException;
+import org.jlab.coda.et.exception.EtDeadException;
+import org.jlab.coda.et.exception.EtException;
+
+/**
+ * This is an implementation of Runnable that wraps an ET station.
+ * It should be run on its own thread.
+ * @author Jeremy McCormick <[log in to unmask]
+ */
+public abstract class RunnableEtStation implements Runnable {
+    
+    protected EtSystem system;
+    protected EtStation station;
+    protected EtAttachment attachment;
+    protected boolean disconnect = false;    
+    protected RunnableEtStationConfiguration config;
+    protected EventTagFilter filter = new AcceptAllFilter();
+    
+    public static final class RunnableEtStationConfiguration {
+        
+        public EtSystem system;
+        public String name;
+        public int order = 1;
+        public int prescale = 1;
+        public int readEvents = 100;
+        public Integer eventType;
+        
+        void validate() {
+            if (system == null) {
+                throw new IllegalArgumentException("system is null");
+            }
+            if (name == null) {
+                throw new IllegalArgumentException("name is null");
+            }
+            if (order <= 0) {
+                throw new IllegalArgumentException("order must be > 0");
+            }
+            if (prescale <= 0) {
+                throw new IllegalArgumentException("prescale must be > 0");
+            }
+        }
+    }
+
+    protected RunnableEtStation() {
+    }
+
+    public RunnableEtStation(RunnableEtStationConfiguration config) {
+        if (config == null) {
+            throw new IllegalArgumentException("config is null");
+        }
+        config.validate();
+        this.config = config;
+    }
+
+    public void run() {
+        
+        setup();
+        
+        try {
+            for (;;) {
+                // Get the next array of events from the server.
+                EtEvent[] events = system.getEvents(
+                        attachment, Mode.SLEEP, Modify.NOTHING, 0, config.readEvents);
+                
+                // Process the events.
+                for (EtEvent event : events) {
+                    // Process an event if it passes the filter (by default accepts all).
+                    if (filter.accept(event.getControl()[0])) {
+                        processEvent(event);
+                    }
+                }
+                
+                // Disconnect if flag is set (by sub-class changing disconnect value).
+                if (disconnect) {
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            System.err.println("Error running " + this.config.name + " ...");
+            e.printStackTrace();
+        } finally {
+            if (system.alive()) {
+                System.out.println(this.config.name + " is disconnecting ...");
+                disconnect();
+                System.out.println("disconnected " + this.config.name);
+            }
+        }
+    }
+
+    public abstract void processEvent(EtEvent event); 
+        
+    protected void setup() {
+        try {
+            // Create the basic station config.
+            EtStationConfig stationConfig = new EtStationConfig();
+            stationConfig.setFlowMode(EtConstants.stationSerial);
+            stationConfig.setBlockMode(EtConstants.stationNonBlocking);
+            stationConfig.setPrescale(config.prescale);
+
+            // Setup event selection.
+            if (config.eventType != null) {
+                int[] select = new int[EtConstants.stationSelectInts];
+                Arrays.fill(select, -1);
+                select[0] = config.eventType;
+                stationConfig.setSelect(select);
+            }
+
+            // Create station and attach to the ET system.
+            EtStation station = system.createStation(stationConfig, config.name, config.order);
+            attachment = system.attach(station);
+
+        } catch (Exception e) {
+            // Any errors during setup are rethrown.
+            throw new RuntimeException(e);
+        }
+    }
+
+    public synchronized void disconnect() {
+        if (system.alive()) {
+            if (attachment.isUsable()) {
+                try {
+                    system.wakeUpAll(station);
+                    system.detach(attachment);
+                } catch (IOException | EtException | EtClosedException | EtDeadException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

Modified: java/branches/monitoring-app-dev/src/main/resources/org/hps/monitoring/config/default_config.prop
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/resources/org/hps/monitoring/config/default_config.prop	(original)
+++ java/branches/monitoring-app-dev/src/main/resources/org/hps/monitoring/config/default_config.prop	Fri Mar 13 14:45:30 2015
@@ -29,8 +29,7 @@
 Host=localhost
 Port=11111
 StationPosition=1
-# Prescale was 1
-Prescale=0
+Prescale=1
 QueueSize=0
 StationName=MY_STATION
 Verbose=false

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use