Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/monitoring on MAIN
MonitoringApplication.java+143-531.7 -> 1.8
MonitoringExample.java+119-1311.9 -> 1.10
+262-184
2 modified files

hps-java/src/main/java/org/lcsim/hps/monitoring
MonitoringApplication.java 1.7 -> 1.8
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
MonitoringExample.java 1.9 -> 1.10
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
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