Author: [log in to unmask] Date: Mon Mar 23 16:20:31 2015 New Revision: 2507 Log: Check in changes from monitoring dev branch. Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EpicsEtProcessor.java Modified: java/branches/monitoring-app-dev/ (props changed) java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EventTagFilter.java java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/SyncEventProcessor.java Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java Mon Mar 23 16:20:31 2015 @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.logging.Logger; @@ -13,11 +14,12 @@ import org.hps.job.JobManager; import org.hps.monitoring.application.model.ConfigurationModel; import org.hps.monitoring.application.model.ConnectionStatus; +import org.hps.monitoring.application.model.ConnectionStatusModel; import org.hps.monitoring.application.model.SteeringType; +import org.hps.monitoring.application.util.EpicsEtProcessor; +import org.hps.monitoring.application.util.ErrorHandler; import org.hps.monitoring.application.util.EtSystemUtil; -import org.hps.monitoring.application.util.PhysicsSyncEventStation; import org.hps.monitoring.application.util.PreStartProcessor; -import org.hps.monitoring.application.util.RunnableEtStation; import org.hps.monitoring.application.util.SyncEventProcessor; import org.hps.monitoring.subsys.et.EtSystemMonitor; import org.hps.monitoring.subsys.et.EtSystemStripCharts; @@ -31,6 +33,8 @@ import org.hps.record.et.EtEventProcessor; import org.hps.record.et.EtStationThread; import org.hps.record.evio.EvioDetectorConditionsProcessor; +import org.hps.record.evio.EvioEventConstants; +import org.jlab.coda.et.EtConstants; import org.jlab.coda.et.exception.EtClosedException; import org.jlab.coda.et.exception.EtException; import org.lcsim.conditions.ConditionsListener; @@ -46,28 +50,33 @@ */ class EventProcessing { - // TODO: Move rest of variables to SessionState class. + SessionState sessionState; + MonitoringApplication application; + ConfigurationModel configurationModel; + ConnectionStatusModel connectionModel; + ErrorHandler errorHandler; + Logger logger; - MonitoringApplication application; - Logger logger; - SessionState sessionState; - List<CompositeRecordProcessor> processors; - List<Driver> drivers; - List<ConditionsListener> conditionsListeners; - int stationPosition; - /** * This class is used to organize the objects for an event processing session. */ class SessionState { + + List<CompositeRecordProcessor> processors; + List<Driver> drivers; + List<ConditionsListener> conditionsListeners; + JobManager jobManager; LCSimEventBuilder eventBuilder; CompositeLoop loop; + + boolean usingEtServer; + EventProcessingThread processingThread; Thread sessionWatchdogThread; ThreadGroup stationThreadGroup = new ThreadGroup("Station Threads"); - List<RunnableEtStation> stations = new ArrayList<RunnableEtStation>(); - EtConnection connection; + List<EtStationThread> stations = new ArrayList<EtStationThread>(); + EtConnection connection; } /** @@ -81,20 +90,20 @@ List<CompositeRecordProcessor> processors, List<Driver> drivers, List<ConditionsListener> conditionsListeners) { + this.application = application; - this.sessionState = new SessionState(); - this.logger = MonitoringApplication.logger; - this.processors = processors; - this.drivers = drivers; - this.conditionsListeners = conditionsListeners; - this.stationPosition = application.configurationModel.getStationPosition(); + logger = MonitoringApplication.logger; + configurationModel = application.configurationModel; + connectionModel = application.connectionModel; + errorHandler = application.errorHandler; + + sessionState = new SessionState(); + sessionState.processors = processors; + sessionState.drivers = drivers; + sessionState.conditionsListeners = conditionsListeners; + sessionState.usingEtServer = application.configurationModel.getDataSourceType().equals(DataSourceType.ET_SERVER); } - int getNextStationPosition() { - this.stationPosition += 1; - return this.stationPosition; - } - /** * Setup this class from the global configuration. * @param configurationModel The global configuration. @@ -111,7 +120,7 @@ /** * @param configurationModel */ - private void setupLcsim(ConfigurationModel configurationModel) { + void setupLcsim(ConfigurationModel configurationModel) { MonitoringApplication.logger.info("setting up lcsim"); // Get steering resource or file as a String parameter. @@ -133,7 +142,7 @@ // Add conditions listeners after new database conditions manager is initialized from // job manager. DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance(); - for (ConditionsListener conditionsListener : conditionsListeners) { + for (ConditionsListener conditionsListener : sessionState.conditionsListeners) { logger.config("adding conditions listener " + conditionsListener.getClass().getName()); conditionsManager.addConditionsListener(conditionsListener); } @@ -183,15 +192,14 @@ logger.info("lcsim setup was successful"); } catch (Throwable t) { - // Catch all errors and re-throw them as RuntimeExceptions. - application.errorHandler.setError(t).setMessage("Error setting up LCSim.").printStackTrace().raiseException(); + throw new RuntimeException("Error setting up LCSim.", t); } } /** * Create the event builder for converting EVIO events to LCSim. */ - private void createEventBuilder(ConfigurationModel configurationModel) { + void createEventBuilder(ConfigurationModel configurationModel) { // Get the class for the event builder. String eventBuilderClassName = configurationModel.getEventBuilderClassName(); @@ -211,7 +219,7 @@ * Setup the loop from the global configuration. * @param configurationModel The global configuration. */ - private void setupLoop(ConfigurationModel configurationModel) { + void setupLoop(ConfigurationModel configurationModel) { CompositeLoopConfiguration loopConfig = new CompositeLoopConfiguration() .setStopOnEndRun(configurationModel.getDisconnectOnEndRun()) @@ -248,13 +256,13 @@ } // Add extra CompositeRecordProcessors to the loop config. - for (CompositeRecordProcessor processor : processors) { + for (CompositeRecordProcessor processor : sessionState.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) { + for (Driver driver : sessionState.drivers) { loopConfig.add(driver); logger.config("added extra Driver " + driver.getName() + " to job"); } @@ -271,7 +279,7 @@ * Setup a steering file on disk. * @param steering The steering file. */ - private void setupSteeringFile(String steering) { + void setupSteeringFile(String steering) { sessionState.jobManager.setup(new File(steering)); } @@ -280,7 +288,7 @@ * @param steering The steering resource. * @throws IOException if there is a problem setting up or accessing the resource. */ - private void setupSteeringResource(String steering) throws IOException { + void setupSteeringResource(String steering) throws IOException { InputStream is = this.getClass().getClassLoader().getResourceAsStream(steering); if (is == null) throw new IOException("Steering resource is not accessible or does not exist."); @@ -294,14 +302,8 @@ killWatchdogThread(); // Wake up all ET stations to unblock the system and make sure secondary stations are detached. - //wakeUpEtStations() - // Wake up the primary ET station doing the event processing. - logger.finest("waking up event processing station ..."); - try { - sessionState.connection.getEtSystem().wakeUpAll(sessionState.connection.getEtStation()); - logger.finest("event processing station woken up"); - } catch (IOException | EtException | EtClosedException e) { - e.printStackTrace(); + if (usingEtServer()) { + wakeUpEtStations(); } // Stop the event processing now that ET system is unblocked. @@ -321,7 +323,7 @@ // Notify of last error that occurred in event processing. if (sessionState.loop.getLastError() != null) { // Log the error. - application.errorHandler.setError(sessionState.loop.getLastError()).log(); + errorHandler.setError(sessionState.loop.getLastError()).log(); } // Invalidate the loop. @@ -337,22 +339,18 @@ /** * Wake up all ET stations associated with event processing. */ - private void wakeUpEtStations() { + void wakeUpEtStations() { if (sessionState.connection != null) { logger.fine("waking up ET stations ..."); // Wake up secondary ET stations. - for (RunnableEtStation station : sessionState.stations) { - if (station.getEtStation().isUsable()) { - // Wake up the station which will automatically trigger a detach. - try { - logger.finest("waking up " + station.getEtStation().getName() + " ..."); - sessionState.connection.getEtSystem().wakeUpAll(station.getEtStation()); - logger.finest(station.getEtStation().getName() + " woken up"); - } catch (IOException | EtException | EtClosedException e) { - e.printStackTrace(); - } - } + for (EtStationThread station : sessionState.stations) { + + // First unblock if in ET call. + station.wakeUp(); + + // Next interrupt so that it will definitely stop. + station.interrupt(); } // Wait for station threads to die after being woken up. @@ -367,23 +365,23 @@ } } } - - logger.finest("destroying station thread group"); + sessionState.stationThreadGroup.destroy(); - logger.finest("station thread group destroyed"); + + logger.finest("station threads destroyed"); // Wake up the primary ET station doing the event processing. logger.finest("waking up event processing station ..."); try { sessionState.connection.getEtSystem().wakeUpAll(sessionState.connection.getEtStation()); - logger.finest("event processing station woken up"); + logger.finest("event processing station was woken up"); } catch (IOException | EtException | EtClosedException e) { e.printStackTrace(); } - logger.finest("ET stations woken up"); - } - } + logger.finest("ET stations all woken up"); + } + } /** * Start event processing on the event processing thread and start the watchdog thread. @@ -396,7 +394,7 @@ sessionState.processingThread = new EventProcessingThread(sessionState.loop); sessionState.processingThread.start(); - // Start the watchdog thread which will auto-disconnect when event processing is done. + // Start the watch dog thread which will auto-disconnect when event processing is done. sessionState.sessionWatchdogThread = new SessionWatchdogThread(sessionState.processingThread); sessionState.sessionWatchdogThread.start(); @@ -408,9 +406,9 @@ */ synchronized void pause() { logger.finest("pausing"); - if (!application.connectionModel.getPaused()) { + if (!connectionModel.getPaused()) { sessionState.loop.pause(); - application.connectionModel.setPaused(true); + connectionModel.setPaused(true); } logger.finest("paused"); } @@ -420,10 +418,10 @@ */ synchronized void next() { logger.finest("getting next event"); - if (application.connectionModel.getPaused()) { - application.connectionModel.setPaused(false); + if (connectionModel.getPaused()) { + connectionModel.setPaused(false); sessionState.loop.execute(Command.GO_N, 1L, true); - application.connectionModel.setPaused(true); + connectionModel.setPaused(true); } logger.finest("got next event"); } @@ -433,10 +431,10 @@ */ synchronized void resume() { logger.finest("resuming"); - if (application.connectionModel.getPaused()) { + if (connectionModel.getPaused()) { // Notify event processor to continue. sessionState.loop.resume(); - application.connectionModel.setPaused(false); + connectionModel.setPaused(false); } logger.finest("resumed"); } @@ -483,7 +481,7 @@ } /** - * True if the processing thread is active. + * True if the processing thread is valid and active. * @return True if processing thread is active. */ boolean isActive() { @@ -504,7 +502,10 @@ createEtConnection(); // Add an attachment that listens for DAQ configuration changes via physics SYNC events. - //createPhysicsSyncStation(); + //createSyncStation(); + + // Add an attachment which listens for EPICs events with scalar data. + createEpicsStation(); // Add an attachment that listens for PRESTART events. //createPreStartStation(); @@ -516,7 +517,7 @@ logger.fine("ET system is connected"); } else { // This is when a direct file source is used and ET is not needed. - application.connectionModel.setConnectionStatus(ConnectionStatus.CONNECTED); + connectionModel.setConnectionStatus(ConnectionStatus.CONNECTED); } } @@ -526,7 +527,7 @@ * @return True if using an ET server. */ boolean usingEtServer() { - return application.configurationModel.getDataSourceType().equals(DataSourceType.ET_SERVER); + return sessionState.usingEtServer; } /** @@ -534,72 +535,76 @@ */ synchronized void createEtConnection() { // Setup connection to ET system. - sessionState.connection = EtSystemUtil.createEtConnection(application.configurationModel); + sessionState.connection = EtSystemUtil.createEtConnection(configurationModel); if (sessionState.connection != null) { // Set status to connected as there is now a live ET connection. - application.connectionModel.setConnectionStatus(ConnectionStatus.CONNECTED); + connectionModel.setConnectionStatus(ConnectionStatus.CONNECTED); } else { - application.errorHandler.setError(new RuntimeException("Failed to create ET connection.")).log().printStackTrace().raiseException(); - } - } - - /** - * Create the ET that listens for DAQ configuration change via SYNC events. - */ - private void createPhysicsSyncStation() { - logger.fine("creating physics SYNC station ..."); - PhysicsSyncEventStation configStation = new PhysicsSyncEventStation( - this.sessionState.connection.getEtSystem(), - this.sessionState.connection.getEtStation().getName() + "_PhysicsSync", - getNextStationPosition()); - sessionState.stations.add(configStation); - new Thread(sessionState.stationThreadGroup, configStation).start(); - logger.fine("physics SYNC station created"); - } + errorHandler.setError(new RuntimeException("Failed to create ET connection.")).log().printStackTrace().raiseException(); + } + } - /** - * Create the ET station that listens for GO events in order to initialize the conditions system. - */ - /* - private void createPreStartStation() { - logger.fine("creating PRESTART station ..."); - String detectorName = this.application.configurationModel.getDetectorName(); - EtSystem system = this.sessionState.connection.getEtSystem(); - String stationName = this.sessionState.connection.getEtStation().getName() + "_PreStart"; - int order = getNextStationPosition(); - PreStartEtStation preStartStation = new PreStartEtStation( - detectorName, - system, - stationName, - order); - sessionState.stations.add(preStartStation); - new Thread(sessionState.stationThreadGroup, preStartStation).start(); - logger.fine("PRESTART station created"); - } - */ - - private void createSyncStation() { + static int[] createSelectArray() { + int select[] = new int[EtConstants.stationSelectInts]; + Arrays.fill(select, -1); + return select; + } + + void createSyncStation() { + + int syncEventType = 0; + syncEventType = syncEventType ^ (1 << 6); + syncEventType = syncEventType ^ (1 << 7); + int select[] = createSelectArray(); + select[1] = syncEventType; + createStationThread( new SyncEventProcessor(), - "_SYNC", - 1); - } + "SYNC", + 1, + select); + } - private void createPreStartStation() { + void createPreStartStation() { + + int[] select = createSelectArray(); + select[0] = EvioEventConstants.PRESTART_EVENT_TAG; + createStationThread( - new PreStartProcessor(this.application.configurationModel.getDetectorName()), - "_PRESTART", - 1); + new PreStartProcessor(configurationModel.getDetectorName()), + "PRESTART", + 1, + select); } - private void createStationThread(EtEventProcessor processor, String nameAppend, int stationPosition) { - EtStationThread thread = new EtStationThread( + void createEpicsStation() { + + int[] select = createSelectArray(); + select[0] = EvioEventConstants.EPICS_EVENT_TAG; + + createStationThread( + new EpicsEtProcessor(), + "EPICS", + 1, + select); + } + + void createStationThread(EtEventProcessor processor, String nameAppend, int stationPosition, int[] control) { + EtStationThread stationThread = new EtStationThread( processor, sessionState.connection.getEtSystem(), - sessionState.connection.getEtStation().getName() + nameAppend, - stationPosition); - new Thread(sessionState.stationThreadGroup, thread).start(); + sessionState.connection.getEtStation().getName() + "_" + nameAppend, + stationPosition, + control); + new Thread(sessionState.stationThreadGroup, stationThread).start(); + sessionState.stations.add(stationThread); + logger.config("started ET station " + nameAppend); + StringBuffer sb = new StringBuffer(); + for (int word : control) { + sb.append(word + " "); + } + logger.config("station has select array: " + sb.toString()); } /** @@ -609,10 +614,12 @@ synchronized void disconnect() { // Cleanup the ET connection. - closeEtConnection(); + if (usingEtServer()) { + closeEtConnection(); + } // Change application state to disconnected. - application.connectionModel.setConnectionStatus(ConnectionStatus.DISCONNECTED); + connectionModel.setConnectionStatus(ConnectionStatus.DISCONNECTED); } /** @@ -644,20 +651,24 @@ void invalidate() { - this.application = null; - this.conditionsListeners = null; - this.drivers = null; - this.logger = null; - this.processors = null; - - this.sessionState.jobManager = null; - this.sessionState.eventBuilder = null; - this.sessionState.loop = null; - this.sessionState.processingThread = null; - this.sessionState.sessionWatchdogThread = null; - this.sessionState.stationThreadGroup = null; - this.sessionState.stations = null; - this.sessionState.connection = null; - this.sessionState = null; + application = null; + logger = null; + configurationModel = null; + connectionModel = null; + errorHandler = null; + + sessionState.conditionsListeners = null; + sessionState.drivers = null; + sessionState.processors = null; + sessionState.jobManager = null; + sessionState.eventBuilder = null; + sessionState.loop = null; + sessionState.processingThread = null; + sessionState.sessionWatchdogThread = null; + sessionState.stationThreadGroup = null; + sessionState.stations = null; + sessionState.connection = null; + + sessionState = null; } } Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java Mon Mar 23 16:20:31 2015 @@ -205,18 +205,16 @@ // Setup AIDA plotting and connect it to the GUI. setupAida(); - // Set the configuration. + // Always load the default configuration first. + loadConfiguration(new Configuration(DEFAULT_CONFIGURATION)); + + // Overlay the user configuration if one was specified. if (configuration != null) { - // There was a user specified configuration. this.configuration = configuration; - } else { - // Use the default configuration. - this.configuration = new Configuration(DEFAULT_CONFIGURATION); + loadConfiguration(this.configuration); } - - // Load the configuration. - loadConfiguration(this.configuration); - + + // Enable the GUI now that initialization is complete. frame.setEnabled(true); logger.info("application initialized successfully"); @@ -826,7 +824,7 @@ } /** - * + * Run the disconnection on a separate thread. */ void runDisconnectThread() { new Thread() { Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java Mon Mar 23 16:20:31 2015 @@ -140,7 +140,7 @@ // Create the main horizontal split pane for dividing the left and right panels. mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel); - mainSplitPane.setDividerLocation(PIXEL_WIDTH_MAX / 2); + mainSplitPane.setDividerLocation((int) (PIXEL_WIDTH_MAX * 0.4)); bottomPanel.add(mainSplitPane, BorderLayout.CENTER); // Create the menu bar. Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EpicsEtProcessor.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EpicsEtProcessor.java (added) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EpicsEtProcessor.java Mon Mar 23 16:20:31 2015 @@ -0,0 +1,31 @@ +package org.hps.monitoring.application.util; + +import java.io.IOException; + +import org.hps.record.et.EtEventProcessor; +import org.jlab.coda.et.EtEvent; +import org.jlab.coda.jevio.EvioEvent; +import org.jlab.coda.jevio.EvioException; +import org.jlab.coda.jevio.EvioReader; + +import org.hps.evio.epics.EpicsEvioProcessor; + +/** + * + * @author Jeremy McCormick <[log in to unmask]> + */ +public class EpicsEtProcessor extends EtEventProcessor { + + EpicsEvioProcessor evioProcessor = new EpicsEvioProcessor(); + + public void process(EtEvent event) { + EvioEvent evio; + try { + evio = new EvioReader(event.getDataBuffer()).parseNextEvent(); + } catch (IOException | EvioException e) { + throw new RuntimeException(e); + } + evioProcessor.process(evio); + } +} + Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java Mon Mar 23 16:20:31 2015 @@ -1,7 +1,10 @@ package org.hps.monitoring.application.util; + +import java.util.Arrays; import org.hps.monitoring.application.model.ConfigurationModel; import org.hps.record.et.EtConnection; +import org.jlab.coda.et.EtConstants; public final class EtSystemUtil { @@ -20,5 +23,11 @@ config.getWaitMode(), config.getWaitTime(), config.getChunkSize()); + } + + public static int[] createSelectArray() { + int select[] = new int[EtConstants.stationSelectInts]; + Arrays.fill(select, -1); + return select; } } Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EventTagFilter.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EventTagFilter.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/EventTagFilter.java Mon Mar 23 16:20:31 2015 @@ -14,7 +14,7 @@ public static final class SyncTagFilter implements EventTagFilter { public boolean accept(int eventTag) { // Physics event with sync information (DAQ config) has bit 6 set. - return (((eventTag >> 6) & 1) == 1) && ((eventTag >> 7)== 1); + return (((eventTag >> 6) & 1) == 1) && ((eventTag >> 7) == 1); } } Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/SyncEventProcessor.java ============================================================================= --- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/SyncEventProcessor.java (original) +++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/SyncEventProcessor.java Mon Mar 23 16:20:31 2015 @@ -13,6 +13,8 @@ import org.jlab.coda.jevio.EvioReader; import org.lcsim.event.base.BaseLCSimEvent; +import org.hps.monitoring.application.util.EventTagFilter.SyncTagFilter; + /** * * @author Jeremy McCormick <[log in to unmask]> @@ -21,29 +23,31 @@ private static final String TRIGGER_CONFIG = "TriggerConfig"; TriggerConfigEvioReader configReader = new TriggerConfigEvioReader(); + EventTagFilter filter = new SyncTagFilter(); public void process(EtEvent event) { - EvioEvent evioEvent = null; - try { - evioEvent = new EvioReader(event.getDataBuffer()).parseNextEvent(); - } catch (IOException | EvioException e) { - throw new RuntimeException(e); - } - //System.out.println("dumping EVIO event ..."); - //System.out.println(evioEvent.toXML()); - try { - BaseLCSimEvent lcsimEvent = new BaseLCSimEvent(9999, 9999, "dummy", 0, false); - configReader.getDAQConfig(evioEvent, lcsimEvent); - if (lcsimEvent.hasCollection(EvioDAQParser.class, TRIGGER_CONFIG)) { - List<EvioDAQParser> configList = lcsimEvent.get(EvioDAQParser.class, TRIGGER_CONFIG); - if (!configList.isEmpty()) { - ConfigurationManager.updateConfiguration(configList.get(0)); + if (filter.accept(event.getControl()[0])) { + EvioEvent evioEvent = null; + try { + evioEvent = new EvioReader(event.getDataBuffer()).parseNextEvent(); + } catch (IOException | EvioException e) { + throw new RuntimeException(e); + } + System.out.println("Dumping physics SYNC event ..."); + System.out.println(evioEvent.toXML()); + try { + BaseLCSimEvent lcsimEvent = new BaseLCSimEvent(9999, 9999, "dummy", 0, false); + configReader.getDAQConfig(evioEvent, lcsimEvent); + if (lcsimEvent.hasCollection(EvioDAQParser.class, TRIGGER_CONFIG)) { + List<EvioDAQParser> configList = lcsimEvent.get(EvioDAQParser.class, TRIGGER_CONFIG); + if (!configList.isEmpty()) { + ConfigurationManager.updateConfiguration(configList.get(0)); + } } + } catch (Exception e) { + System.err.println("Failed to load DAQ config from sync event ..."); + e.printStackTrace(); } - } catch (Exception e) { - System.err.println("Failed to load DAQ config from sync event ..."); - e.printStackTrace(); } } - }