Print

Print


Author: [log in to unmask]
Date: Tue Nov  3 12:19:38 2015
New Revision: 3927

Log:
Simple class for extracting DAQ config from EVIO data.

Added:
    java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigEvioProcessor.java

Added: java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigEvioProcessor.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigEvioProcessor.java	(added)
+++ java/trunk/record-util/src/main/java/org/hps/record/daqconfig/DAQConfigEvioProcessor.java	Tue Nov  3 12:19:38 2015
@@ -0,0 +1,65 @@
+package org.hps.record.daqconfig;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.record.evio.EvioBankTag;
+import org.hps.record.evio.EvioEventProcessor;
+import org.hps.record.evio.EvioEventUtilities;
+import org.jlab.coda.jevio.BaseStructure;
+import org.jlab.coda.jevio.EvioEvent;
+import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
+
+/**
+ * Modified from code in {@link org.hps.evio.TriggerConfigEvioReader} to extract trigger
+ * config without an output LCSim event.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+public class DAQConfigEvioProcessor extends EvioEventProcessor {
+           
+    private List<EvioDAQParser> triggerConfig = new ArrayList<EvioDAQParser>();
+
+    @Override
+    public void process(EvioEvent evioEvent) {        
+        for (BaseStructure bank : evioEvent.getChildrenList()) {
+            if (bank.getChildCount() <= 0)
+                continue;
+            int crate = bank.getHeader().getTag();
+            for (BaseStructure subBank : bank.getChildrenList()) {
+                if (EvioBankTag.TRIGGER_CONFIG.equals(subBank)) {
+                    if (subBank.getStringData() == null) {                        
+                        throw new RuntimeException("Trigger config bank is missing string data.");
+                    }
+                    createTriggerConfig(evioEvent, crate, subBank);
+                }
+            }
+        }
+    }
+    
+    private void createTriggerConfig(EvioEvent evioEvent, int crate, BaseStructure subBank) {
+        
+        // Get run number from EVIO event.
+        int runNumber = EvioEventUtilities.getRunNumber(evioEvent);
+        
+        // Initialize the conditions system if necessary as the DAQ config parsing classes use it.
+        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+        if (!conditionsManager.isInitialized() || conditionsManager.getRun() != runNumber) {
+            try {
+                conditionsManager.setXmlConfig("/org/hps/conditions/config/conditions_database_no_svt.xml");
+                DatabaseConditionsManager.getInstance().setDetector("HPS-dummy-detector", runNumber);
+            } catch (ConditionsNotFoundException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        
+        // Create the trigger config from the EVIO data.
+        triggerConfig = new ArrayList<EvioDAQParser>();
+        triggerConfig.add(new EvioDAQParser());
+        triggerConfig.get(0).parse(
+                crate, 
+                runNumber, 
+                subBank.getStringData());
+    }
+}