hps-java/src/main/java/org/lcsim/hps/monitoring
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
hps-java/src/main/java/org/lcsim/hps/monitoring
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