Commit in hps-java/src/main/java/org/lcsim/hps/monitoring on MAIN | |||
MonitoringApplication.java | +143 | -53 | 1.7 -> 1.8 |
MonitoringExample.java | +119 | -131 | 1.9 -> 1.10 |
+262 | -184 |
diff -u -r1.7 -r1.8 --- MonitoringApplication.java 4 Apr 2012 23:26:07 -0000 1.7 +++ MonitoringApplication.java 6 Apr 2012 00:11:05 -0000 1.8 @@ -42,42 +42,49 @@
import org.lcsim.hps.monitoring.ConnectionStatusPanel.ConnectionStatus; import org.lcsim.job.JobControlManager; import org.lcsim.util.Driver;
+import org.lcsim.util.DriverAdapter;
import org.lcsim.util.aida.AIDA; public class MonitoringApplication extends JPanel implements ActionListener {
- JTabbedPane tabs; - ConnectionPanel connectionPanel; - ConnectionStatusPanel connectionStatusPanel; - EventPanel eventPanel; - JobPanel jobPanel; - - JMenuBar menuBar; - JMenuItem connectItem; - JMenuItem disconnectItem; - JMenuItem resetConnectionItem; - JMenuItem connectionLoadItem; - JMenuItem connectionSaveItem; - JMenuItem exitItem; - JMenuItem resetEventsItem; - JMenuItem savePlotsItem; - JMenuItem resetDriversItem; - JMenuItem logItem; - JMenuItem terminalItem; - JMenuItem screenshotItem;
+ private JTabbedPane tabs; + private ConnectionPanel connectionPanel; + private ConnectionStatusPanel connectionStatusPanel; + private EventPanel eventPanel; + private JobPanel jobPanel; + + private JMenuBar menuBar; + private JMenuItem connectItem; + private JMenuItem disconnectItem; + private JMenuItem resetConnectionItem; + private JMenuItem connectionLoadItem; + private JMenuItem connectionSaveItem; + private JMenuItem exitItem; + private JMenuItem resetEventsItem; + private JMenuItem savePlotsItem; + private JMenuItem resetDriversItem; + private JMenuItem logItem; + private JMenuItem terminalItem; + private JMenuItem screenshotItem;
- JobControlManager mgr = null;
+ private JobControlManager mgr = null;
// Saved references to original System PrintStreams.
- PrintStream sysOut; - PrintStream sysErr;
+ private PrintStream sysOut; + private PrintStream sysErr; + + private static final String screenshotFormat = "png";
- // Current PrintStreams for logging. - PrintStream logOut; - PrintStream logErr;
+ private EtConnection connection;
- static final String screenshotFormat = "png"; -
+ private DriverAdapter driverAdapter; + + static final class JobParameters { + String detectorName; + String steeringResource; + String eventBuilderClassName; + } +
public MonitoringApplication() { super(new GridBagLayout());
@@ -123,7 +130,7 @@
c.gridy = 1; add(tabsPanel, c); }
-
+
private void createMenu() { menuBar = new JMenuBar();
@@ -215,6 +222,12 @@
jobMenu.add(screenshotItem); }
+ void setJobParameters(JobParameters p) { + jobPanel.setDetectorName(p.detectorName); + jobPanel.setSteeringResource(p.steeringResource); + jobPanel.setDefaultEventBuilder(p.eventBuilderClassName); + } +
public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (connectCmd.equals(cmd)) {
@@ -234,7 +247,7 @@
} else if (resetDriversCmd.equals(cmd)) { resetDrivers(); } else if (logCmd.equals(cmd)) {
- chooseLogFile();
+ logToFile();
} else if (terminalCmd.equals(cmd)) { logToTerminal(); } else if (screenshotCmd.equals(cmd)) {
@@ -253,6 +266,10 @@
JOptionPane.showMessageDialog(this, m); }
+ void setDriverAdapter(DriverAdapter adapter) { + this.driverAdapter = adapter; + } +
/** * Sets up the frame to run the application. * This should be called using Runnable.run() (see MonitoringExample).
@@ -267,22 +284,6 @@
frame.pack(); frame.setVisible(true); }
- - ConnectionPanel getConnectionPanel() { - return connectionPanel; - } - - EventPanel getEventPanel() { - return eventPanel; - } - - JobPanel getJobPanel() { - return jobPanel; - } - - ConnectionStatusPanel getConnectionStatusPanel() { - return connectionStatusPanel; - }
private synchronized void savePlots() { JFileChooser fc = new JFileChooser();
@@ -311,7 +312,7 @@
} }
- private void chooseLogFile() {
+ private void logToFile() {
JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Log File"); int r = fc.showSaveDialog(this);
@@ -345,7 +346,7 @@
logItem.setEnabled(true); }
- synchronized void disconnect() {
+ synchronized private void setDisconnected() {
// Enable or disable appropriate menu items. connectItem.setEnabled(true);
@@ -370,11 +371,15 @@
connectionStatusPanel.setStatus(ConnectionStatus.DISCONNECTED); // Reset the LCSim Drivers, which should destroy Plotters.
- resetDrivers();
+ // FIXME: Needed? Doesn't really make sense here. + //resetDrivers();
}
- synchronized void connect() { -
+ synchronized void setConnected() { + + // This status indicates that we are attempting to connect. + setConnectionStatus(ConnectionStatus.CONNECTING); +
// Enable or disable appropriate menu items. connectItem.setEnabled(false); disconnectItem.setEnabled(true);
@@ -390,9 +395,6 @@
// Reset this on connect. connectionPanel.setConnectRequested(false);
- - // Set status. - connectionStatusPanel.setStatus(ConnectionStatus.CONNECTED);
} private void exit() {
@@ -426,4 +428,92 @@
showDialog(e.getMessage()); } }
+ + boolean connectionRequested() { + return connectionPanel.connectRequested(); + } + + boolean disconnectRequested() { + return connectionPanel.disconnectRequested(); + } + + void setConnectionStatus(int status) { + connectionStatusPanel.setStatus(status); + } + + String getEventBuilderClassName() { + return jobPanel.getEventBuilderClassName(); + } + + int getSteeringType() { + return jobPanel.getSteeringType(); + } + + void startJob() { + connectionStatusPanel.setStatus(ConnectionStatus.CONNECTED); + eventPanel.reset(); + eventPanel.updateJobStartTime(); + } + + void startEvent() { + eventPanel.updateEventCount(); + } + + void endEvent() { + + // Update the average event rate. + eventPanel.updateAverageEventRate(); + + // Update elapsed time. + eventPanel.updateElapsedTime(); + } + + void badEvent() { + eventPanel.updateBadEventCount(); + } + + boolean validSteering() { + return jobPanel.validSteering(); + } + + String getSteering() { + return jobPanel.getSteering(); + } + + String getDetectorName() { + return jobPanel.getDetectorName(); + } + + ConnectionParameters getConnectionParameters() { + return connectionPanel.getConnectionParameters(); + } + + void setEtConnection(EtConnection connection) { + this.connection = connection; + } + + void error(Exception e, String mesg) { + e.printStackTrace(); + if (driverAdapter != null) + driverAdapter.finish(null); + if (mesg != null) + showDialog(mesg); + else + showDialog(e.getMessage()); + connection.cleanup(); + Runtime.getRuntime().removeShutdownHook(connection.getShutdownCallback()); + setDisconnected(); + } + + void disconnect(int status) { + if (driverAdapter != null) + driverAdapter.finish(null); + setConnectionStatus(status); + if (status == ConnectionStatus.TIMED_OUT) { + showDialog("ET session timed out. You will be disconnected."); + } + connection.cleanup(); + Runtime.getRuntime().removeShutdownHook(connection.getShutdownCallback()); + setDisconnected(); + }
}
\ No newline at end of file
diff -u -r1.9 -r1.10 --- MonitoringExample.java 4 Apr 2012 23:26:07 -0000 1.9 +++ MonitoringExample.java 6 Apr 2012 00:11:06 -0000 1.10 @@ -1,6 +1,7 @@
package org.lcsim.hps.monitoring; import java.io.File;
+import java.io.IOException;
import java.io.InputStream; import java.nio.ByteBuffer;
@@ -14,11 +15,13 @@
import org.jlab.coda.et.enums.Modify; import org.jlab.coda.et.exception.EtTimeoutException; import org.jlab.coda.jevio.EvioEvent;
+import org.jlab.coda.jevio.EvioException;
import org.jlab.coda.jevio.EvioReader; import org.lcsim.event.EventHeader; import org.lcsim.hps.evio.LCSimEventBuilder;
-import org.lcsim.hps.evio.MCEventBuilder;
+import org.lcsim.hps.evio.LCSimTestRunEventBuilder;
import org.lcsim.hps.monitoring.ConnectionStatusPanel.ConnectionStatus;
+import org.lcsim.hps.monitoring.MonitoringApplication.JobParameters;
import org.lcsim.job.JobControlManager; import org.lcsim.util.DriverAdapter;
@@ -35,11 +38,10 @@
static final String detectorName = "HPS-Test-JLAB-v4pt0"; // Default steering resource.
- static final String steering = "/org/lcsim/hps/steering/TestRunMonitoring.lcsim";
+ static final String steering = "/org/lcsim/hps/steering/TestRunMonitoring.lcsim";
// Default event builder.
- static final String eventBuilderClassName = MCEventBuilder.class.getCanonicalName(); - //static final String eventBuilderClassName = LCSimTestRunEventBuilder.class.getCanonicalName();
+ static final String eventBuilderClassName = LCSimTestRunEventBuilder.class.getCanonicalName();
// The LCSim job manager for running Drivers. JobControlManager jobManager;
@@ -52,6 +54,9 @@
// The ET connection parameters. EtConnection et;
+ + // LCSim event builder. + LCSimEventBuilder eventBuilder = null;
public MonitoringExample() {}
@@ -77,88 +82,35 @@
createMonitoringApplication(); // Push default settings to JobPanel.
- JobPanel jobPanel = app.getJobPanel(); - jobPanel.setDetectorName(detectorName); - jobPanel.setSteeringResource(steering); - jobPanel.setDefaultEventBuilder(eventBuilderClassName); - - // Get ConnectionPanel which will have user connection settings. - ConnectionPanel connectionPanel = app.getConnectionPanel(); -
+ JobParameters jobParams = new JobParameters(); + jobParams.detectorName = detectorName; + jobParams.steeringResource = steering; + jobParams.eventBuilderClassName = eventBuilderClassName; + app.setJobParameters(jobParams); +
// GUI loop. The 'Exit' command will cause the applicatino to quit. while (true) { // Wait for connection request from GUI.
- while (!connectionPanel.connectRequested()) {
+ while (!app.connectionRequested()) {
try { Thread.sleep(1000); } catch (InterruptedException e) {}; }
- ConnectionParameters cn = connectionPanel.getConnectionParameters();
+ ConnectionParameters cn = app.getConnectionParameters();
// Make sure applicable menu items are enabled or disabled.
- app.connect(); - - // Set the GUI status. - app.getConnectionStatusPanel().setStatus(ConnectionStatus.CONNECTING); -
+ app.setConnected(); + + // Setup LCSim. + try { + setupLCSim(); + } catch (Exception e) { + app.error(e, "Failed to setup LCSim. You will be disconnected."); + continue; + } +
// Try block is mostly for EtExceptions and friends. try {
- - // Setup connection to ET system. - et = EtConnection.createEtConnection(cn); - EtSystem sys = et.getEtSystem(); - EtAttachment att = et.getEtAttachment(); - - // Setup the EventBuilder to create LCSim events from EVIO data. - String eventBuilderClassName = app.getJobPanel().getEventBuilderClassName(); - LCSimEventBuilder eventBuilder = null; - try { - eventBuilder = (LCSimEventBuilder)Class.forName(eventBuilderClassName).newInstance(); - } catch (Exception e) { - app.showDialog("Failed to create event builder. Job will run without LCSim."); - } - - // Reset the DriverAdapter. - driverAdapter = null; - - // Check for valid LCSim setup. - if (jobPanel.validSteering() && (eventBuilder != null)) { - - // Get steering resource or file. - String steering = jobPanel.getSteering(); - - // Try to setup LCSim. If it fails, we get disconnected. - try { - // Create job manager and configure based on steering type of resource or file. - jobManager = new JobControlManager(); - jobManager.checkInputFiles(false); - if (app.getJobPanel().getSteeringType() == JobPanel.RESOURCE) { - InputStream is = this.getClass().getResourceAsStream(steering); - jobManager.setup(is); - } else if (app.getJobPanel().getSteeringType() == JobPanel.FILE) { - jobManager.setup(new File(steering)); - } - - // Set job manager in GUI so resetting Drivers works. - app.setJobControlManager(jobManager); - - // Make a DriverAdapter for wrapping the event loop calls. - driverAdapter = jobManager.getDriverAdapter(); - - // Call wrapper to startOfData() on DriverAdapter. - driverAdapter.configure(null); - - // Set the detector name on the event builder so it can find conditions data. - eventBuilder.setDetectorName(jobPanel.getDetectorName()); - } catch (Exception e) { - error(e, "Failed to setup LCSim. You will be disconnected."); - continue; - } - } - - // Start job timer. - EventPanel eventPanel = app.getEventPanel(); - eventPanel.updateJobStartTime(); -
+
// Array of events. EtEvent[] mevs = null;
@@ -166,17 +118,18 @@
Mode waitMode = cn.waitMode; int waitTime = cn.waitTime; int chunk = cn.chunk;
- - // Set status to connected. - app.getConnectionStatusPanel().setStatus(ConnectionStatus.CONNECTED);
- // Reset the event panel in case there have been multiple jobs. - try { - app.getEventPanel().reset(); - } catch (Exception e) { - System.err.println(e.getMessage()); - } -
+ // Setup connection to ET system. + et = EtConnection.createEtConnection(cn); + EtSystem sys = et.getEtSystem(); + EtAttachment att = et.getEtAttachment(); + + // Set reference to EtConnection in GUI. + app.setEtConnection(et); + + // Starts the job in the GUI, which is set of events processed in one session. + app.startJob(); +
// EtEvent loop. while (true) { try {
@@ -186,23 +139,16 @@
// Loop over retrieved EtEvents. for (EtEvent mev : mevs) {
- - // Update GUI's event count. - eventPanel.updateEventCount(); - - // Get EvioEvent and check for errors. - ByteBuffer buf = mev.getDataBuffer(); - EvioReader reader = new EvioReader(buf); - EvioEvent evioEvent = null; - try { - evioEvent = reader.parseNextEvent(); - } catch (java.nio.BufferUnderflowException e) { - e.printStackTrace(); - }
+ + // Create EvioEvent from EtEvent and skip if failed. + EvioEvent evioEvent = createEvioEvent(mev);
if (evioEvent == null) {
- eventPanel.updateBadEventCount();
+ app.badEvent();
continue;
- }
+ } + + // Start of event GUI hook. + app.startEvent();
// Create LCSim event from EVIO data. EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
@@ -213,55 +159,97 @@
} catch (Exception e) { e.printStackTrace(); }
- - // Update the average event rate. - eventPanel.updateAverageEventRate(); - - // Update elapsed time. - eventPanel.updateElapsedTime();
+ + // End of event GUI hook. + app.endEvent();
} // Put events back into the ET system. sys.putEvents(att, mevs); // User requested disconnect in GUI.
- if (connectionPanel.disconnectRequested()) { - disconnect(ConnectionStatus.DISCONNECTING);
+ if (app.disconnectRequested()) { + app.disconnect(ConnectionStatus.DISCONNECTING);
break; } // The session timed out. } catch (EtTimeoutException e) {
- disconnect(ConnectionStatus.TIMED_OUT);
+ app.disconnect(ConnectionStatus.TIMED_OUT);
break; } } // Top-level exception catcher. } catch (Exception e) {
- error(e, null);
+ app.error(e, null);
} } }
- private void error(Exception e, String mesg) { - e.printStackTrace(); - if (mesg != null) - app.showDialog(mesg); - else - app.showDialog(e.getMessage()); - et.cleanup(); - Runtime.getRuntime().removeShutdownHook(et.getShutdownCallback()); - app.disconnect(); - } - - private void disconnect(int status) { - app.getConnectionStatusPanel().setStatus(status); - if (status == ConnectionStatus.TIMED_OUT) { - app.showDialog("ET session timed out. You will be disconnected.");
+ private EvioEvent createEvioEvent(EtEvent etEvent) throws IOException, EvioException { + ByteBuffer buf = etEvent.getDataBuffer(); + EvioReader reader = new EvioReader(buf); + EvioEvent evioEvent = null; + try { + evioEvent = reader.parseNextEvent(); + } catch (java.nio.BufferUnderflowException e) { + e.printStackTrace();
}
- if (driverAdapter != null) - driverAdapter.finish(null); - et.cleanup(); - Runtime.getRuntime().removeShutdownHook(et.getShutdownCallback()); - app.disconnect();
+ return evioEvent;
}
+ + private void setupLCSim() { + + // Reset the DriverAdapter. + driverAdapter = null; + + if (!app.validSteering()) + throw new RuntimeException("Invalid steering file or resource."); + + // Get steering resource or file. + String steering = app.getSteering(); + + // Try to setup LCSim. If it fails, we get disconnected. + try { + // Create job manager and configure based on steering type of resource or file. + jobManager = new JobControlManager(); + jobManager.checkInputFiles(false); + if (app.getSteeringType() == JobPanel.RESOURCE) { + InputStream is = this.getClass().getResourceAsStream(steering); + jobManager.setup(is); + } else if (app.getSteeringType() == JobPanel.FILE) { + jobManager.setup(new File(steering)); + } + + // Set job manager in GUI so resetting Drivers works. + app.setJobControlManager(jobManager); + + // Make a DriverAdapter for wrapping the event loop calls. + driverAdapter = jobManager.getDriverAdapter(); + + // Call startOfData() on DriverAdapter, which initializes conditions system. + driverAdapter.configure(null); + + // Set reference to DriverAdapter in GUI so it can disconnect cleanly. + app.setDriverAdapter(driverAdapter); + + } catch (Exception e) { + throw new RuntimeException("Failed to setup LCSim.", e); + } + + // Reset reference to event builder. + eventBuilder = null; + + // Setup the EventBuilder class. + String eventBuilderClassName = app.getEventBuilderClassName(); + try { + eventBuilder = (LCSimEventBuilder)Class.forName(eventBuilderClassName).newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to create LCSimEventBuilder class.", e); + } + if (eventBuilder == null) + throw new RuntimeException("LCSimEventBuilder points to null"); + + // Set the detector name on the event builder so it can find conditions data. + eventBuilder.setDetectorName(app.getDetectorName()); + }
}
\ No newline at end of file
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