Commit in hps-java/src/main on MAIN | |||
java/org/lcsim/hps/monitoring/MonitoringApplication.java | +145 | -76 | 1.48 -> 1.49 |
resources/org/lcsim/hps/steering/SensorOccupancyPlots.lcsim | +21 | added 1.1 | |
java/org/lcsim/hps/monitoring/svt/SensorOccupancyPlotsDriver.java | +3 | -11 | 1.4 -> 1.5 |
+169 | -87 |
add embedded plotting to monitoring; changed occupancy plots to be compatible with the new way
diff -u -r1.48 -r1.49 --- MonitoringApplication.java 17 May 2012 00:18:39 -0000 1.48 +++ MonitoringApplication.java 5 Jun 2012 19:23:46 -0000 1.49 @@ -1,8 +1,36 @@
package org.lcsim.hps.monitoring;
-import static org.lcsim.hps.monitoring.MonitoringCommands.*;
+import static org.lcsim.hps.monitoring.MonitoringCommands.aidaAutoSaveCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.clearLogTableCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.connectCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.disconnectCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.eventBuilderCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.eventRefreshCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.exitCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.loadConnectionCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.loadJobSettingsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.logLevelCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.logToFileCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.logToTerminalCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.nextCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.pauseCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.resetConnectionSettingsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.resetDriversCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.resetEventsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.resetJobSettingsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.resumeCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.saveConnectionCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.saveJobSettingsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.saveLogTableCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.savePlotsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.screenshotCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.setMaxEventsCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.steeringFileCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.steeringResourceCmd;
+import static org.lcsim.hps.monitoring.MonitoringCommands.updateTimeCmd;
import java.awt.AWTException;
+import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout;
@@ -32,6 +60,7 @@
import java.util.logging.Logger; import javax.imageio.ImageIO;
+import javax.swing.BorderFactory;
import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu;
@@ -44,6 +73,7 @@
import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.Timer;
+import javax.swing.border.EtchedBorder;
import javax.swing.table.DefaultTableModel; import org.apache.commons.cli.CommandLine;
@@ -64,13 +94,15 @@
* calling its main() method. * * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: MonitoringApplication.java,v 1.46 2012/05/10 23:39:37 jeremy - * Exp $
+ * @version $Id: MonitoringApplication.java,v 1.49 2012/06/05 19:23:46 jeremy Exp $
*/ public class MonitoringApplication { // Top-level Swing components. private JPanel mainPanel;
+ private JPanel leftPanel; + private JPanel rightPanel; + private JTabbedPane plotPane;
private JTabbedPane tabs; private ConnectionPanel connectionPanel; private ConnectionStatusPanel connectionStatusPanel;
@@ -85,7 +117,7 @@
private JMenuItem disconnectItem; private JMenuItem resetConnectionItem; private JMenuItem connectionLoadItem;
- private JMenuItem connectionSaveItem;
+ //private JMenuItem connectionSaveItem;
private JMenuItem savePlotsItem; private JMenuItem resetDriversItem; private JMenuItem logItem;
@@ -146,7 +178,15 @@
// Format of date field for log. private final SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM-dd-yyyy HH:mm:ss.SSS"); private static final String LCSIM_FAIL_MESSAGE = "Failed to setup LCSim.";
-
+ + private static final int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; + private static final int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; + + private static final int leftPanelWidth = (int)(screenWidth * 0.33); + private static final int rightPanelWidth = (int)(screenWidth * 0.40); + + private static final int connectionStatusPanelHeight = 50; +
/** * Constructor for monitoring application. Users should not need to use * this; call main() method instead.
@@ -172,18 +212,36 @@
// Create the log table GUI component. createLogTable();
+ // Setup AIDA. + setupAida(); +
// Log that the application started successfully.
- log("Application initialized successfully.");
+ log("Application initialized successfully.");
+ }
+
+ void setupAida() {
+ MonitoringAnalysisFactory.register();
+ MonitoringPlotFactory.setRootPane(plotPane);
} /** * Creates all the JPanels for the monitoring GUI. */ private void createPanels() {
- - // Main panel for the application.
mainPanel = new JPanel(); mainPanel.setLayout(new GridBagLayout());
+ createLeftPanel(); + createRightPanel(); + } + + private void createLeftPanel() { + + // Lefthand panel containing the three application tabs. + leftPanel = new JPanel(); + leftPanel.setPreferredSize(new Dimension(leftPanelWidth, screenHeight-30)); + //leftPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); + //leftPanel.setMinimumSize(new Dimension(leftPanelWidth, screenHeight-30)); + leftPanel.setLayout(new GridBagLayout());
// Connection status panel. GridBagConstraints c = new GridBagConstraints();
@@ -192,8 +250,10 @@
c.anchor = GridBagConstraints.NORTH; c.weightx = c.weighty = 1.0; c.insets = new Insets(15, 0, 0, 15);
+ c.fill = GridBagConstraints.BOTH;
connectionStatusPanel = new ConnectionStatusPanel();
- mainPanel.add(connectionStatusPanel, c);
+ connectionStatusPanel.setPreferredSize(new Dimension(leftPanelWidth-10, connectionStatusPanelHeight)); + leftPanel.add(connectionStatusPanel, c);
// Event processing buttons. c = new GridBagConstraints();
@@ -203,7 +263,7 @@
c.insets = new Insets(0, 0, 0, 20); buttonsPanel = new EventButtonsPanel(); buttonsPanel.addActionListener(actionListener);
- mainPanel.add(buttonsPanel, c);
+ leftPanel.add(buttonsPanel, c);
// Contents of the tabs panel. connectionPanel = new ConnectionPanel();
@@ -229,9 +289,46 @@
c.fill = GridBagConstraints.BOTH; c.weightx = c.weighty = 1.0; c.insets = new Insets(0, 0, 0, 10);
- mainPanel.add(tabsPanel, c);
+ leftPanel.add(tabsPanel, c);
+
+ // Layout attributes for left panel.
+ c = new GridBagConstraints();
+ c.gridx = 0;
+ c.gridy = 0;
+ c.weightx = 1.0;
+ c.weighty = 1.0;
+ c.fill = GridBagConstraints.VERTICAL;
+ c.anchor = GridBagConstraints.WEST;
+ c.insets = new Insets(10, 10, 10, 10);
+ mainPanel.add(leftPanel, c);
}
+ + private void createRightPanel() { + + // Create right-hand panel. + rightPanel = new JPanel(); + rightPanel.setPreferredSize(new Dimension(rightPanelWidth, screenHeight-30)); + //rightPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); + rightPanel.setMinimumSize(new Dimension(rightPanelWidth, screenHeight-30)); + rightPanel.setLayout(new BorderLayout()); + + // Create plot pane with empty tabs. + plotPane = new JTabbedPane(); + //plotPane.removeAll(); + rightPanel.add(plotPane, BorderLayout.CENTER);
+ // Set layout of right panel. + GridBagConstraints c = new GridBagConstraints(); + c.gridx = 1; + c.gridy = 0; + c.fill = GridBagConstraints.BOTH; + //c.anchor = GridBagConstraints.NORTHEAST; + c.anchor = GridBagConstraints.CENTER; + c.weightx = 1.0; + c.weighty = 1.0; + mainPanel.add(rightPanel, c); + } +
private void createMenu() { menuBar = new JMenuBar();
@@ -239,61 +336,24 @@
JMenu connectionMenu = new JMenu("Connection"); connectionMenu.setMnemonic(KeyEvent.VK_C); menuBar.add(connectionMenu);
- - connectItem = new JMenuItem("Connect"); - connectItem.setMnemonic(KeyEvent.VK_C); - connectItem.setActionCommand(connectCmd); - connectItem.addActionListener(actionListener); - connectItem.setToolTipText("Connect to ET system using parameters from connection panel."); - connectionMenu.add(connectItem); - - disconnectItem = new JMenuItem("Disconnect"); - disconnectItem.setMnemonic(KeyEvent.VK_D); - disconnectItem.setActionCommand(disconnectCmd); - disconnectItem.addActionListener(actionListener); - disconnectItem.setEnabled(false); - disconnectItem.setToolTipText("Disconnect from the current ET session."); - connectionMenu.add(disconnectItem); - - resetConnectionItem = new JMenuItem("Reset Connection Settings"); - resetConnectionItem.setMnemonic(KeyEvent.VK_R); - resetConnectionItem.setActionCommand(resetConnectionSettingsCmd); - resetConnectionItem.addActionListener(actionListener); - resetConnectionItem.setToolTipText("Reset connection settings to defaults."); - connectionMenu.add(resetConnectionItem); - - connectionLoadItem = new JMenuItem("Load Connection..."); - connectionLoadItem.setMnemonic(KeyEvent.VK_L); - connectionLoadItem.setActionCommand(loadConnectionCmd); - connectionLoadItem.addActionListener(actionListener); - connectionLoadItem.setToolTipText("Load connection settings from a saved properties file."); - connectionMenu.add(connectionLoadItem); - - connectionSaveItem = new JMenuItem("Save Connection..."); - connectionSaveItem.setMnemonic(KeyEvent.VK_S); - connectionSaveItem.setActionCommand(saveConnectionCmd); - connectionSaveItem.addActionListener(actionListener); - connectionSaveItem.setToolTipText("Save connection settings to a properties file."); - connectionMenu.add(connectionSaveItem); - - JMenuItem exitItem = new JMenuItem("Exit"); - exitItem.setMnemonic(KeyEvent.VK_X); - exitItem.setActionCommand(exitCmd); - exitItem.addActionListener(actionListener); - exitItem.setToolTipText("Exit from the application."); - connectionMenu.add(exitItem);
+ + connectItem = addMenuItem("Connect", KeyEvent.VK_C, connectCmd, true, "Connect to ET system using parameters from connection panel.", connectionMenu); + disconnectItem = addMenuItem("Disconnect", KeyEvent.VK_D, disconnectCmd, false, "Disconnect from the current ET session.", connectionMenu); + resetConnectionItem = addMenuItem("Reset Connection Settings", KeyEvent.VK_R, resetConnectionSettingsCmd, true, "Reset connection settings to defaults.", connectionMenu); + connectionLoadItem = addMenuItem("Load Connection...", KeyEvent.VK_L, loadConnectionCmd, true, "Load connection settings from a saved properties file.", connectionMenu); + addMenuItem("Save Connection...", KeyEvent.VK_S, saveConnectionCmd, true, "Save connection settings to a properties file.", connectionMenu); + addMenuItem("Exit", KeyEvent.VK_X, exitCmd, true, "Exit from the application.", connectionMenu);
JMenu eventMenu = new JMenu("Event"); eventMenu.setMnemonic(KeyEvent.VK_E); menuBar.add(eventMenu);
+ + addMenuItem("Reset Event Monitor", KeyEvent.VK_E, resetEventsCmd, true, "Reset timer and counters in the event monitor tab.", eventMenu);
- JMenuItem resetEventsItem = new JMenuItem("Reset Event Monitor"); - resetEventsItem.setMnemonic(KeyEvent.VK_E); - resetEventsItem.setActionCommand(resetEventsCmd); - resetEventsItem.addActionListener(actionListener); - resetEventsItem.setToolTipText("Reset timer and counters in the event monitor tab."); - eventMenu.add(resetEventsItem); -
+ /** + * FIXME: Rest of these should be converted to use the addMenuItem() helper method... + */ +
JMenuItem eventRefreshItem = new JMenuItem("Set Event Refresh..."); eventRefreshItem.setMnemonic(KeyEvent.VK_V); eventRefreshItem.setActionCommand(eventRefreshCmd);
@@ -396,13 +456,19 @@
saveLogItem.addActionListener(actionListener); saveLogItem.setToolTipText("Save the log records to a tab delimited text file."); logMenu.add(saveLogItem);
- - JMenuItem clearLogItem = new JMenuItem("Clear log"); - clearLogItem.setMnemonic(KeyEvent.VK_C); - clearLogItem.setActionCommand(clearLogTableCmd); - clearLogItem.addActionListener(actionListener); - clearLogItem.setToolTipText("Clear the log table of all messages."); - logMenu.add(clearLogItem);
+ + addMenuItem("Clear log", KeyEvent.VK_C, clearLogTableCmd, true, "Clear the log table of all messages.", logMenu); + } + + private JMenuItem addMenuItem(String label, int mnemonic, String cmd, boolean enabled, String tooltip, JMenu menu) { + JMenuItem item = new JMenuItem(label); + item.setMnemonic(mnemonic); + item.setActionCommand(cmd); + item.setEnabled(enabled); + item.setToolTipText(tooltip); + item.addActionListener(actionListener); + menu.add(item); + return item;
} /**
@@ -448,7 +514,7 @@
JScrollPane logPane = new JScrollPane(logTable); logPane.setPreferredSize(new Dimension(logTableWidth, logTableHeight)); logPane.setMinimumSize(new Dimension(0, 300));
- mainPanel.add(logPane, c);
+ leftPanel.add(logPane, c);
} /**
@@ -623,7 +689,7 @@
private void saveJobSettings() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Save Job Settings");
- int r = fc.showSaveDialog(mainPanel);
+ int r = fc.showSaveDialog(leftPanel);
if (r == JFileChooser.APPROVE_OPTION) { File f = fc.getSelectedFile(); JobSettings settings = jobPanel.getJobSettings();
@@ -641,7 +707,7 @@
private void loadJobSettings() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Load Job Settings");
- int r = fc.showOpenDialog(mainPanel);
+ int r = fc.showOpenDialog(leftPanel);
if (r == JFileChooser.APPROVE_OPTION) { File f = fc.getSelectedFile(); try {
@@ -886,7 +952,7 @@
* @param m The message to display in the dialog box. */ private void showDialog(String m) {
- JOptionPane.showMessageDialog(mainPanel, m);
+ JOptionPane.showMessageDialog(leftPanel, m);
} /**
@@ -1005,7 +1071,7 @@
private void logToFile() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Log File");
- int fcs = fc.showSaveDialog(this.mainPanel);
+ int fcs = fc.showSaveDialog(mainPanel);
if (fcs == JFileChooser.APPROVE_OPTION) { final File logFile = fc.getSelectedFile(); if (logFile.exists()) {
@@ -1185,7 +1251,7 @@
private void chooseScreenshot() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Save Screenshot");
- int r = fc.showSaveDialog(this.mainPanel);
+ int r = fc.showSaveDialog(mainPanel);
if (r == JFileChooser.APPROVE_OPTION) { String fileName = fc.getSelectedFile().getPath(); int extIndex = fileName.lastIndexOf(".");
@@ -1527,6 +1593,9 @@
// Clear the static AIDA tree in case plots are hanging around from previous sessions. resetAidaTree();
+ + // Reset the plots tab. + this.plotPane.removeAll();
// Get steering resource or file as a String parameter. String steering = getSteering();
@@ -1669,7 +1738,7 @@
private void saveLogToFile() { JFileChooser fc = new JFileChooser(); fc.setDialogTitle("Save Log File");
- int fcs = fc.showSaveDialog(this.mainPanel);
+ int fcs = fc.showSaveDialog(mainPanel);
if (fcs == JFileChooser.APPROVE_OPTION) { final File logFile = fc.getSelectedFile(); if (logFile.exists()) {
@@ -1762,7 +1831,7 @@
*/ private void resetAidaTree() { AIDA.defaultInstance().clearAll();
- log("Reset default AIDA tree.");
+ log("Reset default AIDA tree.");
} /**
diff -N SensorOccupancyPlots.lcsim --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ SensorOccupancyPlots.lcsim 5 Jun 2012 19:23:47 -0000 1.1 @@ -0,0 +1,21 @@
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" + xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> + <execute> + <driver name="EventMarkerDriver"/> + <driver name="SVTSetupDriver"/> + <driver name="RawTrackerHitMaker"/> + <driver name="SVTOccupancyPlots"/> + </execute> + <drivers> + <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver"> + <eventInterval>1</eventInterval> + </driver> + <driver name="SVTSetupDriver" type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup"/> + <driver name="RawTrackerHitMaker" type="org.lcsim.hps.recon.tracking.SVTDataToRawTrackerHitDriver"> + <rawTrackerHitOutputCollectionName>SVTRawTrackerHits</rawTrackerHitOutputCollectionName> + </driver> + <driver name="SVTOccupancyPlots" type="org.lcsim.hps.monitoring.svt.SensorOccupancyPlotsDriver"> + <eventRefreshRate>1</eventRefreshRate> + </driver> + </drivers> +</lcsim>
diff -u -r1.4 -r1.5 --- SensorOccupancyPlotsDriver.java 17 May 2012 00:15:48 -0000 1.4 +++ SensorOccupancyPlotsDriver.java 5 Jun 2012 19:23:47 -0000 1.5 @@ -34,7 +34,7 @@
*/ public class SensorOccupancyPlotsDriver extends Driver implements Resettable {
- private String rawTrackerHitCollectionName = "RawTrackerHitMaker_RawTrackerHits";
+ private String rawTrackerHitCollectionName = "SVTRawTrackerHits";
private String trackerName = "Tracker"; private AIDA aida = AIDA.defaultInstance(); private IPlotter plotter;
@@ -82,7 +82,7 @@
// Setup the plotter. IAnalysisFactory fac = aida.analysisFactory();
- plotter = fac.createPlotterFactory().create(detector.getDetectorName() + " : HPS SVT Sensor Occupancy Plots");
+ plotter = fac.createPlotterFactory("SVT").create("Sensor Occupancy Plots");
IPlotterStyle pstyle = plotter.style(); pstyle.dataStyle().fillStyle().setColor("green"); pstyle.dataStyle().markerStyle().setColor("green");
@@ -124,7 +124,6 @@
hist.setAllowUserInteraction(false); hist.setAllowPopupMenus(false); }
- plotter.show();
} public void process(EventHeader event) {
@@ -135,7 +134,7 @@
// Increment strip hit count. for (RawTrackerHit hit : rawTrackerHits) {
- int[] strips = occupancyMap.get(hit.getDetectorElement().getName()); // FIXME: Null pointer exception here???
+ int[] strips = occupancyMap.get(hit.getDetectorElement().getName());
strips[hit.getIdentifierFieldValue("strip")] += 1; }
@@ -162,17 +161,10 @@
private void resetOccupancyMap() { occupancyMap = new HashMap<String, int[]>(); for (SiSensor sensor : sensors) {
- //System.out.println("putting map entry for --> " + sensor.getName());
occupancyMap.put(sensor.getName(), new int[640]); } }
- public void endOfData() { - if (plotter != null) { - plotter.hide(); - } - } -
public void reset() { eventCount = 0; resetOccupancyMap();
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