Author: [log in to unmask] Date: Fri Mar 6 22:52:58 2015 New Revision: 2331 Log: Merge r2312 through r2330 into prod branch. Added: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/TriggerDiagnosticsPanel.java - copied unchanged from r2330, java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/TriggerDiagnosticsPanel.java java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationListener.java - copied unchanged from r2330, java/trunk/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationListener.java java/branches/prod/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/ecal/ - copied from r2330, java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/ecal/ java/branches/prod/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java - copied unchanged from r2330, java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/trackrecon/SVTOpeningAlignment.java java/branches/prod/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim - copied unchanged from r2330, java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/TriggerDiagnosticsMonitoring.lcsim java/branches/prod/steering-files/src/main/resources/org/hps/steering/monitoring/ecal/ - copied from r2330, java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/ecal/ java/branches/prod/steering-files/src/main/resources/org/hps/steering/users/mgraham/AlignmentMonitorTest.lcsim - copied unchanged from r2330, java/trunk/steering-files/src/main/resources/org/hps/steering/users/mgraham/AlignmentMonitorTest.lcsim java/branches/prod/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-3Hit.xml - copied unchanged from r2330, java/trunk/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-3Hit.xml Modified: java/branches/prod/ (props changed) java/branches/prod/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java java/branches/prod/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java java/branches/prod/detector-data/detectors/HPS-ECalCommissioning-v2/compact.xml java/branches/prod/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java java/branches/prod/monitoring-app/ (props changed) java/branches/prod/monitoring-app/pom.xml java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/EventProcessing.java java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplication.java java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java java/branches/prod/record-util/src/main/java/org/hps/record/composite/CompositeLoop.java java/branches/prod/record-util/src/main/java/org/hps/record/evio/EvioEventConstants.java java/branches/prod/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim Modified: java/branches/prod/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java ============================================================================= --- java/branches/prod/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java (original) +++ java/branches/prod/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java Fri Mar 6 22:52:58 2015 @@ -39,7 +39,6 @@ */ public class ConditionsDriver extends Driver { - DatabaseConditionsManager conditionsManager; String detectorName = null; String tag = null; String xmlConfigResource = null; @@ -50,7 +49,6 @@ * Default constructor. */ public ConditionsDriver() { - conditionsManager = new DatabaseConditionsManager(); } /** @@ -107,6 +105,9 @@ * @throws RuntimeException If there is a problem setting up the conditions system. */ public void initialize() { + + DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance(); + if (xmlConfigResource != null) { // Set a custom XML configuration resource. conditionsManager.setXmlConfig(xmlConfigResource); Modified: java/branches/prod/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java ============================================================================= --- java/branches/prod/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java (original) +++ java/branches/prod/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java Fri Mar 6 22:52:58 2015 @@ -10,13 +10,14 @@ /** * This is a convenience utility for associating the geometric crystal - * objects with the conditions system channel information. + * objects with the conditions system channel information and vice versa. * * @author Jeremy McCormick <[log in to unmask]> */ final class EcalCrystalChannelMap { Map<EcalCrystal, EcalChannel> crystalMap = new HashMap<EcalCrystal, EcalChannel>(); + Map<EcalChannel, EcalCrystal> channelMap = new HashMap<EcalChannel, EcalCrystal>(); /** * Creates the map between crystals and channels. @@ -24,13 +25,23 @@ * @param channels The list of channels. */ EcalCrystalChannelMap(HPSEcalAPI api, EcalChannelCollection channels) { - List<EcalCrystal> crystals = api.getCrystals(); - for (EcalCrystal crystal : crystals) { + + // Map crystals to channels. + for (EcalCrystal crystal : api.getCrystals()) { EcalChannel channel = channels.findGeometric(crystal.getIdentifier().getValue()); if (channel == null) { throw new RuntimeException("ECAL channel was not found for ID: " + crystal.getExpandedIdentifier()); } crystalMap.put(crystal, channel); + } + + // Map channels to crystals. + for (EcalChannel channel : channels) { + EcalCrystal crystal = api.getCrystal(channel.getX(), channel.getY()); + if (crystal == null) { + throw new RuntimeException("ECAl crystal was not found for channel X Y: " + channel.getX() + " " + channel.getY()); + } + channelMap.put(channel, crystal); } } @@ -42,4 +53,13 @@ EcalChannel getEcalChannel(EcalCrystal crystal) { return crystalMap.get(crystal); } + + /** + * Get a channel from a crystal. + * @param crystal The geometry object. + * @return The channel information or null if does not exist. + */ + EcalCrystal getEcalCrystal(EcalChannel channel) { + return channelMap.get(channel); + } } Modified: java/branches/prod/detector-data/detectors/HPS-ECalCommissioning-v2/compact.xml ============================================================================= --- java/branches/prod/detector-data/detectors/HPS-ECalCommissioning-v2/compact.xml (original) +++ java/branches/prod/detector-data/detectors/HPS-ECalCommissioning-v2/compact.xml Fri Mar 6 22:52:58 2015 @@ -2,7 +2,7 @@ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd"> - <info name="HPS-ECalCommissioning-v3"> + <info name="HPS-ECalCommissioning-v2"> <comment>HPS ECal commissioning for pass2 with no SVT, By=-0.3309 </comment> </info> Modified: java/branches/prod/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java ============================================================================= --- java/branches/prod/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java (original) +++ java/branches/prod/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Fri Mar 6 22:52:58 2015 @@ -127,9 +127,10 @@ eventID = new int[3]; } else { logger.finest("Read EVIO event number " + eventID[0]); - if (eventID[1] != 1) { - logger.warning("Trigger code is usually 1; got " + eventID[1]); - } + // Stop hardcoding event tags. + //if (eventID[1] != 1) { + // logger.warning("Trigger code is usually 1; got " + eventID[1]); + //} if (eventID[2] != 0) { logger.warning("Readout status is usually 0; got " + eventID[2]); } Modified: java/branches/prod/monitoring-app/pom.xml ============================================================================= --- java/branches/prod/monitoring-app/pom.xml (original) +++ java/branches/prod/monitoring-app/pom.xml Fri Mar 6 22:52:58 2015 @@ -115,6 +115,10 @@ </dependency> <dependency> <groupId>org.hps</groupId> + <artifactId>hps-monitoring-util</artifactId> + </dependency> + <dependency> + <groupId>org.hps</groupId> <artifactId>hps-steering-files</artifactId> </dependency> <dependency> Modified: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java ============================================================================= --- java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java (original) +++ java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java Fri Mar 6 22:52:58 2015 @@ -11,6 +11,7 @@ import javax.swing.JComboBox; import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem; +import org.hps.monitoring.application.model.ConfigurationListener; import org.hps.monitoring.application.model.ConfigurationModel; import org.hps.monitoring.application.model.ConnectionStatus; import org.hps.monitoring.application.model.ConnectionStatusModel; @@ -27,7 +28,7 @@ * * @author Jeremy McCormick <[log in to unmask]> */ -class DataSourceComboBox extends JComboBox<DataSourceItem> implements PropertyChangeListener, ActionListener { +class DataSourceComboBox extends JComboBox<DataSourceItem> implements PropertyChangeListener, ActionListener, ConfigurationListener { ConnectionStatusModel connectionModel; ConfigurationModel configurationModel; @@ -62,29 +63,13 @@ setActionCommand(Commands.DATA_SOURCE_CHANGED); setPreferredSize(new Dimension(400, this.getPreferredSize().height)); setEditable(false); - connectionModel.addPropertyChangeListener(this); this.configurationModel = configurationModel; - } - - void initialize() { - - // Add the default ET item. - addItem(new DataSourceItem(configurationModel.getEtPath(), DataSourceType.ET_SERVER)); - - // Add a file source if one has been provided. - if (configurationModel.getDataSourcePath() != null) { - addItem(new DataSourceItem(configurationModel.getDataSourcePath(), getDataSourceType(configurationModel.getDataSourcePath()))); - } - - // Set the initially selected item. - setSelectedItem(); - - // Don't add as the property listener until after initialization. - configurationModel.addPropertyChangeListener(this); - } - + connectionModel.addPropertyChangeListener(this); + configurationModel.addConfigurationListener(this); + } + void setSelectedItem() { - DataSourceItem item = findItem(configurationModel.getDataSourcePath(), configurationModel.getDataSourceType()); + DataSourceItem item = findItem(configurationModel.getDataSourcePath(), getDataSourceType(configurationModel.getDataSourcePath())); if (item != null) { setSelectedItem(item); } @@ -96,26 +81,31 @@ @Override public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals(ConnectionStatusModel.CONNECTION_STATUS_PROPERTY)) { - ConnectionStatus status = (ConnectionStatus) evt.getNewValue(); - if (status.equals(ConnectionStatus.DISCONNECTED)) { - setEnabled(true); - } else { - setEnabled(false); - } - } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_PATH_PROPERTY)) { - String path = configurationModel.getDataSourcePath(); - DataSourceType type = getDataSourceType(path); - addDataSourceItem(path, type); - setSelectedItem(); - } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_TYPE_PROPERTY)) { - setSelectedItem(); - } else if (evt.getPropertyName().equals(ConfigurationModel.HOST_PROPERTY)) { - updateEtItem(); - } else if (evt.getPropertyName().equals(ConfigurationModel.ET_NAME_PROPERTY)) { - updateEtItem(); - } else if (evt.getPropertyName().equals(ConfigurationModel.PORT_PROPERTY)) { - updateEtItem(); + configurationModel.removePropertyChangeListener(this); + try { + if (evt.getPropertyName().equals(ConnectionStatusModel.CONNECTION_STATUS_PROPERTY)) { + ConnectionStatus status = (ConnectionStatus) evt.getNewValue(); + if (status.equals(ConnectionStatus.DISCONNECTED)) { + setEnabled(true); + } else { + setEnabled(false); + } + } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_PATH_PROPERTY)) { + String path = configurationModel.getDataSourcePath(); + DataSourceType type = getDataSourceType(path); + addDataSourceItem(path, type); + setSelectedItem(); + } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_TYPE_PROPERTY)) { + setSelectedItem(); + } else if (evt.getPropertyName().equals(ConfigurationModel.HOST_PROPERTY)) { + updateEtItem(); + } else if (evt.getPropertyName().equals(ConfigurationModel.ET_NAME_PROPERTY)) { + updateEtItem(); + } else if (evt.getPropertyName().equals(ConfigurationModel.PORT_PROPERTY)) { + updateEtItem(); + } + } finally { + configurationModel.addPropertyChangeListener(this); } } @@ -142,7 +132,37 @@ } finally { configurationModel.addPropertyChangeListener(this); } - } + } + } + + public void configurationChanged(ConfigurationModel configurationModel) { + + // Clear the data source list. + removeAllItems(); + + // Add the default ET item. + this.removeActionListener(this); + try { + addItem(new DataSourceItem(configurationModel.getEtPath(), DataSourceType.ET_SERVER)); + + // Add a file source if one has been provided. + if (configurationModel.getDataSourcePath() != null) { + // Add an item for this data source. + DataSourceItem newItem = new DataSourceItem(configurationModel.getDataSourcePath(), configurationModel.getDataSourceType()); + //System.out.println("adding new item " + newItem.name + " " + newItem.type); + addItem(newItem); + if (configurationModel.getDataSourceType().isFile()) { + //System.out.println("setting selected"); + setSelectedItem(newItem); + } + } + } finally { + this.addActionListener(this); + } + + // Don't add as property change listener until after configuration has been initialized. + configurationModel.removePropertyChangeListener(this); + configurationModel.addPropertyChangeListener(this); } public void addItem(DataSourceItem item) { Modified: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/EventProcessing.java ============================================================================= --- java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/EventProcessing.java (original) +++ java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/EventProcessing.java Fri Mar 6 22:52:58 2015 @@ -40,6 +40,7 @@ Logger logger; SessionState sessionState; List<CompositeRecordProcessor> processors; + List<Driver> drivers; /** * This class is used to organize the objects for an event processing session. @@ -62,11 +63,13 @@ */ EventProcessing( MonitoringApplication application, - List<CompositeRecordProcessor> processors) { + List<CompositeRecordProcessor> processors, + List<Driver> drivers) { this.application = application; - this.sessionState = new SessionState(); + this.sessionState = new SessionState(); + this.logger = MonitoringApplication.logger; this.processors = processors; - this.logger = MonitoringApplication.logger; + this.drivers = drivers; } /** @@ -173,8 +176,7 @@ .setProcessingStage(configurationModel.getProcessingStage()) .setEtConnection(sessionState.connection) .setFilePath(configurationModel.getDataSourcePath()) - .setLCSimEventBuilder(sessionState.eventBuilder) - .setDetectorName(configurationModel.getDetectorName()); + .setLCSimEventBuilder(sessionState.eventBuilder); if (configurationModel.hasValidProperty(ConfigurationModel.MAX_EVENTS_PROPERTY)) { long maxEvents = configurationModel.getMaxEvents(); @@ -185,26 +187,37 @@ } // Add all Drivers from the JobManager. - for (Driver driver : sessionState.jobManager.getDriverExecList()) { + for (Driver driver : sessionState.jobManager.getDriverExecList()) { loopConfig.add(driver); + logger.config("added Driver " + driver.getName() + " to job"); } // Using ET server? if (configurationModel.getDataSourceType().equals(DataSourceType.ET_SERVER)) { // ET system monitor. + logger.config("added EtSystemMonitor to job"); loopConfig.add(new EtSystemMonitor()); // ET system strip charts. + logger.config("added EtSystemStripCharts to job"); loopConfig.add(new EtSystemStripCharts()); } // Add extra CompositeRecordProcessors to the loop config. - for (CompositeRecordProcessor processor : processors) { + for (CompositeRecordProcessor processor : processors) { loopConfig.add(processor); + logger.config("added extra processor " + processor.getClass().getSimpleName() + " to job"); + } + + // Add extra Drivers to the loop config. + for (Driver driver : drivers) { + loopConfig.add(driver); + logger.config("added extra Driver " + driver.getName() + " to job"); } // Enable conditions system activation from EVIO event information. + logger.config("added EvioDetectorConditionsProcessor to job with detector " + configurationModel.getDetectorName()); loopConfig.add(new EvioDetectorConditionsProcessor(configurationModel.getDetectorName())); // Create the CompositeLoop with the configuration. @@ -240,6 +253,11 @@ */ synchronized void stop() { + logger.info("event processing is stopping"); + + // Disconnect from ET system. + disconnect(); + // Is the event processing thread not null? if (sessionState.processingThread != null) { @@ -250,8 +268,10 @@ sessionState.loop.execute(Command.STOP); try { + logger.info("waiting for event processing thread to finish"); // This should always work, because the ET system is disconnected before this. sessionState.processingThread.join(); + logger.info("event processing thread finished"); } catch (InterruptedException e) { // Don't know when this would ever happen. e.printStackTrace(); @@ -269,6 +289,8 @@ // Set the loop to null as a new one will be created for next session. sessionState.loop = null; + + logger.info("event processing stopped"); } /** @@ -276,6 +298,8 @@ * and start the watchdog thread. */ synchronized void start() { + + logger.fine("event processing threads are starting"); // Start the event processing thread. sessionState.processingThread = new EventProcessingThread(sessionState.loop); @@ -283,45 +307,54 @@ // Start the watchdog thread which will auto-disconnect when event processing is done. sessionState.sessionWatchdogThread = new SessionWatchdogThread(sessionState.processingThread); - sessionState.sessionWatchdogThread.start(); + sessionState.sessionWatchdogThread.start(); + + logger.fine("started event processing threads"); } /** * Notify the event processor to pause processing. */ synchronized void pause() { + logger.finest("pausing"); if (!application.connectionModel.getPaused()) { sessionState.loop.pause(); application.connectionModel.setPaused(true); } + logger.finest("paused"); } /** * Get next event if in pause mode. */ synchronized void next() { + logger.finest("getting next event"); if (application.connectionModel.getPaused()) { application.connectionModel.setPaused(false); sessionState.loop.execute(Command.GO_N, 1L, true); application.connectionModel.setPaused(true); } + logger.finest("got next event"); } /** * Resume processing events from pause mode. */ synchronized void resume() { + logger.finest("resuming"); if (application.connectionModel.getPaused()) { // Notify event processor to continue. sessionState.loop.resume(); application.connectionModel.setPaused(false); } + logger.finest("resumed"); } /** * Interrupt and join to the processing watchdog thread. */ synchronized void killWatchdogThread() { + logger.fine("killing watchdog thread"); // Is the session watchdog thread not null? if (sessionState.sessionWatchdogThread != null) { // Is the thread still alive? @@ -339,18 +372,21 @@ // Set the thread object to null. sessionState.sessionWatchdogThread = null; } + logger.fine("watchdog thread killed"); } /** * Cleanup the ET connection. */ synchronized void closeEtConnection() { + logger.fine("closing ET connection"); if (sessionState.connection != null) { if (sessionState.connection.getEtSystem().alive()) { sessionState.connection.cleanup(); } sessionState.connection = null; - } + } + logger.fine("ET connection closed"); } /** @@ -364,8 +400,8 @@ /** * Connect to the ET system using the current connection settings. */ - void connect() throws IOException { - + synchronized void connect() throws IOException { + logger.fine("connecting to ET system"); // Setup the network connection if using an ET server. if (usingEtServer()) { // Create a connection to the ET server. @@ -378,6 +414,7 @@ // This is when a direct file source is used and ET is not needed. application.connectionModel.setConnectionStatus(ConnectionStatus.CONNECTED); } + logger.fine("ET system is connected"); } /** @@ -409,16 +446,20 @@ * Disconnect from the current ET session with a particular status. * @param status The connection status. */ - void disconnect() { + synchronized void disconnect() { + + logger.fine("disconnecting"); // Kill the session watch dog thread. killWatchdogThread(); // Cleanup the ET connection. closeEtConnection(); - + // Change application state to disconnected. application.connectionModel.setConnectionStatus(ConnectionStatus.DISCONNECTED); + + logger.fine("disconnected"); } /** @@ -446,4 +487,4 @@ } } } -} +} Modified: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplication.java ============================================================================= --- java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplication.java (original) +++ java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplication.java Fri Mar 6 22:52:58 2015 @@ -32,6 +32,7 @@ import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; +import org.hps.conditions.database.DatabaseConditionsManager; import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem; import org.hps.monitoring.application.LogTable.LogRecordModel; import org.hps.monitoring.application.model.Configuration; @@ -50,6 +51,7 @@ import org.hps.monitoring.subsys.SystemStatusRegistry; import org.hps.record.composite.CompositeRecordProcessor; import org.hps.record.enums.DataSourceType; +import org.lcsim.util.Driver; import org.lcsim.util.aida.AIDA; import org.lcsim.util.log.DefaultLogFormatter; @@ -156,10 +158,7 @@ // Load the configuration. loadConfiguration(this.configuration); - - // Setup the data source combo box. - frame.dataSourceComboBox.initialize(); - + logger.info("application initialized successfully"); } @@ -189,19 +188,9 @@ String cmd = e.getActionCommand(); if (Commands.CONNECT.equals(cmd)) { - // Run the start session method on a separate thread. - new Thread() { - public void run() { - startSession(); - } - }.start(); + startSession(); } else if (Commands.DISCONNECT.equals(cmd)) { - // Run the stop session method on a separate thread. - new Thread() { - public void run() { - stopSession(); - } - }.start(); + processing.stop(); } else if (Commands.SAVE_PLOTS.equals(cmd)) { savePlots(); } else if (Commands.EXIT.equals(cmd)) { @@ -357,18 +346,14 @@ } /** - * <p> * Start a new monitoring session. - * <p> - * This method is executed in a separate thread from the EDT within {@link #actionPerformed(ActionEvent)} - * so that GUI updates are not blocked while the session is being setup. - */ - void startSession() { + */ + synchronized void startSession() { logger.info("starting new session"); try { - + // Reset the plot panel and global AIDA state. resetPlots(); @@ -381,8 +366,11 @@ List<CompositeRecordProcessor> processors = new ArrayList<CompositeRecordProcessor>(); processors.add(frame.runPanel.new RunPanelUpdater()); + List<Driver> drivers = new ArrayList<Driver>(); + drivers.add(frame.triggerPanel.new TriggerDiagnosticGUIDriver()); + // Initialize event processing with the list of processors and reference to the application. - processing = new EventProcessing(this, processors); + processing = new EventProcessing(this, processors, drivers); // Connect to the ET system, if applicable. processing.connect(); @@ -412,31 +400,13 @@ logger.severe("failed to start new session"); } } - - /** - * Stop the session by disconnecting from the ET system and stopping the event processing. - */ - void stopSession() { - - logger.info("stopping the session"); - - // Disconnect from ET system, if using the ET server, and set the proper disconnected GUI state. - processing.disconnect(); - - // Stop the event processing, which is called after the ET system goes down to avoid hanging in calls to ET system. - processing.stop(); - - logger.info("session was stopped"); - } - + /** * Exit from the application. */ void exit() { - // Cleanup ET system if necessary. if (processing != null && processing.isActive()) { - logger.info("killing active ET connection"); - processing.closeEtConnection(); + processing.stop(); } frame.setVisible(false); logger.info("exiting the application"); Modified: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java ============================================================================= --- java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java (original) +++ java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java Fri Mar 6 22:52:58 2015 @@ -29,6 +29,7 @@ LogPanel logPanel; SystemStatusTable systemStatusTable; JPanel buttonsPanel; + TriggerDiagnosticsPanel triggerPanel; JSplitPane mainSplitPane; JSplitPane rightSplitPane; @@ -113,6 +114,10 @@ systemStatusTable = new SystemStatusTable(); tableTabbedPane.addTab("System Status Monitor", new JScrollPane(systemStatusTable)); + // Add the trigger diagnostics tables. + triggerPanel = new TriggerDiagnosticsPanel(); + tableTabbedPane.addTab("Trigger Diagnostics", triggerPanel); + // Vertical split pane in left panel. leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, runPanel, tableTabbedPane); leftPanel.add(leftSplitPane, BorderLayout.CENTER); @@ -132,11 +137,12 @@ // 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.9); + rightSplitPane.setResizeWeight(0.8); 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); bottomPanel.add(mainSplitPane, BorderLayout.CENTER); // Create the menu bar. @@ -174,9 +180,13 @@ component.setPreferredSize(scaledDimension); } + /** + * Restore default window settings. + */ void restoreDefaults() { + setExtendedState(JFrame.MAXIMIZED_BOTH); mainSplitPane.resetToPreferredSizes(); leftSplitPane.resetToPreferredSizes(); - rightSplitPane.resetToPreferredSizes(); + rightSplitPane.resetToPreferredSizes(); } } Modified: java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java ============================================================================= --- java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java (original) +++ java/branches/prod/monitoring-app/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java Fri Mar 6 22:52:58 2015 @@ -1,6 +1,5 @@ package org.hps.monitoring.application.model; -import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -17,6 +16,8 @@ public final class ConfigurationModel extends AbstractModel { Configuration configuration; + + List<ConfigurationListener> listeners = new ArrayList<ConfigurationListener>(); // Job setting properties. public static final String DETECTOR_NAME_PROPERTY = "DetectorName"; @@ -53,6 +54,9 @@ public static final String WAIT_MODE_PROPERTY = "WaitMode"; public static final String WAIT_TIME_PROPERTY = "WaitTime"; public static final String PRESCALE_PROPERTY = "Prescale"; + + // Action command to get notified after configuration change is performed. + public static final String CONFIGURATION_CHANGED = "configurationChanged"; static final String[] CONFIG_PROPERTIES = AbstractModel.getPropertyNames(ConfigurationModel.class); @@ -64,10 +68,21 @@ this.configuration = configuration; fireModelChanged(); } + + public void addConfigurationListener(ConfigurationListener listener) { + listeners.add(listener); + } public void setConfiguration(Configuration configuration) { this.configuration = configuration; fireModelChanged(); + fireConfigurationChanged(); + } + + void fireConfigurationChanged() { + for (ConfigurationListener listener : listeners) { + listener.configurationChanged(this); + } } public Configuration getConfiguration() { Modified: java/branches/prod/record-util/src/main/java/org/hps/record/composite/CompositeLoop.java ============================================================================= --- java/branches/prod/record-util/src/main/java/org/hps/record/composite/CompositeLoop.java (original) +++ java/branches/prod/record-util/src/main/java/org/hps/record/composite/CompositeLoop.java Fri Mar 6 22:52:58 2015 @@ -18,10 +18,8 @@ import org.hps.record.et.EtEventSource.EtSourceException; import org.hps.record.evio.EvioEventProcessor; import org.hps.record.evio.EvioFileSource; -import org.lcsim.conditions.ConditionsManager; import org.lcsim.util.Driver; import org.lcsim.util.loop.LCIOEventSource; -import org.lcsim.util.loop.LCSimConditionsManagerImplementation; /** * Implementation of a composite record loop for processing @@ -265,7 +263,6 @@ // Configure ET system. if (config.sourceType == DataSourceType.ET_SERVER) { - //System.out.println("compositeLoop.addAdapter(etAdapter)"); addAdapter(etAdapter); } @@ -274,28 +271,17 @@ if (config.sourceType.ordinal() <= DataSourceType.EVIO_FILE.ordinal()) { if (evioAdapter == null) evioAdapter = new EvioEventAdapter(); - //System.out.println("compositeLoop.addAdapter(evioAdapter)"); addAdapter(evioAdapter); } } // Configure LCIO processing. if (config.processingStage.ordinal() >= ProcessingStage.LCIO.ordinal()) { - if (lcioAdapter == null) + if (lcioAdapter == null) { lcioAdapter = new LcioEventAdapter(); - //System.out.println("compositeLoop.addAdapter(lcioAdapter)"); + } addAdapter(lcioAdapter); if (config.eventBuilder != null) { - if (config.detectorName != null) { - // Is LCSim ConditionsManager installed yet? - if (!ConditionsManager.isSetup()) { - // Setup default LCSim conditions system if not already. - LCSimConditionsManagerImplementation.register(); - } - //config.eventBuilder.setDetectorName(config.detectorName); - } else { - throw new IllegalArgumentException("Missing detectorName in configuration."); - } lcioAdapter.setLCSimEventBuilder(config.eventBuilder); } else { throw new IllegalArgumentException("Missing an LCSimEventBuilder in configuration."); Modified: java/branches/prod/record-util/src/main/java/org/hps/record/evio/EvioEventConstants.java ============================================================================= --- java/branches/prod/record-util/src/main/java/org/hps/record/evio/EvioEventConstants.java (original) +++ java/branches/prod/record-util/src/main/java/org/hps/record/evio/EvioEventConstants.java Fri Mar 6 22:52:58 2015 @@ -12,4 +12,9 @@ public static final int EVENTID_BANK_TAG = 0xC000; public static final int HEAD_BANK_TAG = 0xe10F; + + public static final int EPICS_EVENT_TAG = 31; + public static final int EPICS_BANK_TAG_2s = -1; + public static final int EPICS_BANK_TAG_20s = -1; + } Modified: java/branches/prod/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim ============================================================================= --- java/branches/prod/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim (original) +++ java/branches/prod/steering-files/src/main/resources/org/hps/steering/readout/CommRun2014LoosePairs.lcsim Fri Mar 6 22:52:58 2015 @@ -47,16 +47,18 @@ <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName> <clusterWindow>1</clusterWindow> </driver> - <driver name="PairTrigger0" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver"> + <driver name="PairTrigger1" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver"> <clusterCollectionName>EcalClusters</clusterCollectionName> <deadTime>10</deadTime> <pairCoincidence>4</pairCoincidence> - <minHitCount>2</minHitCount> + <minHitCount>3</minHitCount> <energySumHigh>2.0</energySumHigh> - <energySumLow>0.0</energySumLow> + <energySumLow>1.0</energySumLow> <energyDifferenceHigh>1.2</energyDifferenceHigh> - <coplanarityHigh>90</coplanarityHigh> + <coplanarityHigh>40</coplanarityHigh> <seedEnergyLow>0.1</seedEnergyLow> + <energySlopeParamF>0.005500</energySlopeParamF> + <energySlopeLow>0.4</energySlopeLow> <outputFileName>${outputFile}.triggers</outputFileName> </driver> <driver name="AidaSaveDriver"