Author: [log in to unmask]
Date: Tue Oct 6 14:16:03 2015
New Revision: 3776
Log:
Minor reorganization and add a few utility methods
Modified:
java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsData.java
java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsRunProcessor.java
java/trunk/record-util/src/main/java/org/hps/record/evio/EvioEventUtilities.java
java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetadataProcessor.java
java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileSource.java
java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerData.java
java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalersEvioProcessor.java
Modified: java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsData.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsData.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsData.java Tue Oct 6 14:16:03 2015
@@ -8,6 +8,10 @@
import java.util.Map.Entry;
import java.util.Set;
+import org.hps.record.evio.EventTagConstant;
+import org.hps.record.evio.EvioBankTag;
+import org.jlab.coda.jevio.BaseStructure;
+import org.jlab.coda.jevio.EvioEvent;
import org.lcsim.event.EventHeader;
import org.lcsim.event.GenericObject;
@@ -265,4 +269,45 @@
stringMap.put(EPICS_VARIABLE_NAMES, object.getKeys());
event.put(collectionName, collection, GenericObject.class, 0, DUMMY_INT_MAP, DUMMY_FLOAT_MAP, stringMap);
}
+
+ /**
+ * Get EPICS data from an EVIO event.
+ *
+ * @param evioEvent the EVIO event
+ * @return the EPICS data or <code>null</code> if it is not present in the event
+ */
+ public static EpicsData getEpicsData(EvioEvent evioEvent) {
+
+ EpicsData epicsData = null;
+
+ // Is this an EPICS event?
+ if (EventTagConstant.EPICS.equals(evioEvent)) {
+
+ // Find the bank with the EPICS data string.
+ final BaseStructure epicsBank = EvioBankTag.EPICS_STRING.findBank(evioEvent);
+
+ // Was EPICS data found in the event?
+ if (epicsBank != null) {
+
+ // Create EpicsData object from bank's string data.
+ epicsData = new EpicsData(epicsBank.getStringData()[0]);
+
+ // Find the header information in the event.
+ final BaseStructure headerBank = EvioBankTag.EPICS_HEADER.findBank(evioEvent);
+
+ if (headerBank != null) {
+ // Set the header object.
+ epicsData.setEpicsHeader(EpicsHeader.fromEvio(headerBank.getIntData()));
+ } else {
+ throw new RuntimeException("EPICS data is missing header.");
+ }
+
+ } else {
+ // This is an error because the string data bank should always be present in EPICS events.
+ throw new RuntimeException("No data bank found in EPICS event.");
+ }
+ }
+ return epicsData;
+ }
+
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsRunProcessor.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsRunProcessor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/epics/EpicsRunProcessor.java Tue Oct 6 14:16:03 2015
@@ -4,9 +4,13 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.hps.record.evio.EvioEventProcessor;
import org.jlab.coda.jevio.EvioEvent;
+import org.lcsim.util.log.DefaultLogFormatter;
+import org.lcsim.util.log.LogUtil;
/**
* Creates a list of EPICS data found in EVIO events across an entire job.
@@ -15,6 +19,11 @@
*/
public final class EpicsRunProcessor extends EvioEventProcessor {
+ /**
+ * Setup class logger.
+ */
+ private static final Logger LOGGER = LogUtil.create(EpicsRunProcessor.class, new DefaultLogFormatter(), Level.INFO);
+
/**
* The current EPICS data block from the EVIO events (last one that was found).
*/
@@ -54,11 +63,15 @@
public void process(final EvioEvent evioEvent) {
// Call the processor that will load EPICS data if it exists in the event.
+ this.processor.reset();
this.processor.process(evioEvent);
this.currentEpicsData = this.processor.getEpicsData();
// Add EPICS data to the collection.
if (this.currentEpicsData != null) {
+ LOGGER.info("adding EPICS data for run " + this.currentEpicsData.getEpicsHeader().getRun() + " and timestamp "
+ + this.currentEpicsData.getEpicsHeader().getTimestamp() + " with seq "
+ + this.currentEpicsData.getEpicsHeader().getSequence());
this.epicsDataSet.add(this.currentEpicsData);
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioEventUtilities.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioEventUtilities.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioEventUtilities.java Tue Oct 6 14:16:03 2015
@@ -8,8 +8,17 @@
import static org.hps.record.evio.EvioEventConstants.PRESTART_EVENT_TAG;
import static org.hps.record.evio.EvioEventConstants.SYNC_EVENT_TAG;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.record.daqconfig.EvioDAQParser;
+import org.hps.record.epics.EpicsData;
+import org.hps.record.epics.EpicsHeader;
+import org.hps.record.scalers.ScalerData;
import org.jlab.coda.jevio.BaseStructure;
import org.jlab.coda.jevio.EvioEvent;
+import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
/**
* This is a set of basic static utility methods for <code>EvioEvent</code> objects.
@@ -18,6 +27,13 @@
*/
public final class EvioEventUtilities {
+ /**
+ * Class should not be instantiated.
+ */
+ private EvioEventUtilities() {
+ throw new UnsupportedOperationException("Do not instantiate this class.");
+ }
+
/**
* Extract the CODA run data stored in a control event.
*
@@ -235,11 +251,49 @@
}
return eventId;
}
-
- /**
- * Class should not be instantiated.
- */
- private EvioEventUtilities() {
- throw new UnsupportedOperationException("Do not instantiate this class.");
+
+ static EvioDAQParser createDAQConfig(EvioEvent evioEvent, int crate, BaseStructure subBank) {
+
+ EvioDAQParser parser = new EvioDAQParser();
+
+ // 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.
+ parser.parse(
+ crate,
+ runNumber,
+ subBank.getStringData());
+
+ return parser;
+ }
+
+ public static List<EvioDAQParser> getDAQConfig(EvioEvent evioEvent) {
+ List<EvioDAQParser> triggerConfig = new ArrayList<EvioDAQParser>();
+ outerLoop: 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.");
+ }
+ triggerConfig.add(createDAQConfig(evioEvent, crate, subBank));
+ }
+ }
+ }
+ return triggerConfig;
}
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetadataProcessor.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetadataProcessor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetadataProcessor.java Tue Oct 6 14:16:03 2015
@@ -9,7 +9,7 @@
import org.lcsim.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
-
+// TODO: add doc
public class EvioFileMetadataProcessor extends EvioEventProcessor {
private static Logger LOGGER = LogUtil.create(EvioFileMetadataProcessor.class, new DefaultLogFormatter(), Level.ALL);
Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileSource.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileSource.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileSource.java Tue Oct 6 14:16:03 2015
@@ -160,6 +160,7 @@
private void openReader() {
try {
System.out.println("Opening reader for file " + this.files.get(this.fileIndex) + " ...");
+ // FIXME: this should use the reader directly and cached paths should be managed externally
this.reader = EvioFileUtilities.open(this.files.get(this.fileIndex), true);
System.out.println("Done opening file.");
} catch (EvioException | IOException e) {
Modified: java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerData.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerData.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalerData.java Tue Oct 6 14:16:03 2015
@@ -5,6 +5,10 @@
import java.util.List;
import java.util.Map;
+import org.hps.record.evio.EvioEventConstants;
+import org.hps.record.evio.EvioEventUtilities;
+import org.jlab.coda.jevio.BaseStructure;
+import org.jlab.coda.jevio.EvioEvent;
import org.lcsim.event.EventHeader;
import org.lcsim.event.EventHeader.LCMetaData;
import org.lcsim.event.GenericObject;
@@ -241,4 +245,39 @@
event.put(collectionName, collection, GenericObject.class, 0, timestampParameter, DUMMY_FLOAT_MAP,
DUMMY_STRING_MAP);
}
+
+ /**
+ * Get scaler data from an EVIO event.
+ *
+ * @param evioEvent the EVIO event
+ * @return the scaler data or <code>null</code> if it does not exist in the event
+ */
+ public static ScalerData getScalerData(final EvioEvent evioEvent) {
+ ScalerData scalerData = null;
+ outerBankLoop: for (final BaseStructure bank : evioEvent.getChildrenList()) {
+ // Does the crate tag match?
+ if (bank.getHeader().getTag() == EvioEventConstants.SCALERS_CRATE_TAG) {
+ if (bank.getChildrenList() != null) {
+ for (final BaseStructure subBank : bank.getChildrenList()) {
+ // Does the bank tag match?
+ if (subBank.getHeader().getTag() == EvioEventConstants.SCALERS_BANK_TAG) {
+
+ // Get event ID.
+ final int eventId = EvioEventUtilities.getEventIdData(evioEvent)[0];
+
+ // Get event's timestamp.
+ final int timestamp = EvioEventUtilities.getHeadBankData(evioEvent)[3];
+
+ // Create scaler data.
+ scalerData = new ScalerData(subBank.getIntData(), eventId, timestamp);
+
+ break outerBankLoop;
+ }
+ }
+ }
+ }
+ }
+ return scalerData;
+ }
+
}
Modified: java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalersEvioProcessor.java
=============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalersEvioProcessor.java (original)
+++ java/trunk/record-util/src/main/java/org/hps/record/scalers/ScalersEvioProcessor.java Tue Oct 6 14:16:03 2015
@@ -7,10 +7,8 @@
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.hps.record.evio.EvioEventConstants;
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.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
@@ -60,44 +58,6 @@
}
/**
- * Get scaler data from the EVIO event.
- *
- * @param evioEvent the EVIO event
- * @return the scaler data or <code>null</code> if none exists
- */
- private ScalerData getScalerData(final EvioEvent evioEvent) {
- ScalerData scalerData = null;
- // Proceed if sync bit checking is not enabled or sync bit is on.
- outerBankLoop: for (final BaseStructure bank : evioEvent.getChildrenList()) {
- // Does the crate tag match?
- if (bank.getHeader().getTag() == EvioEventConstants.SCALERS_CRATE_TAG) {
- if (bank.getChildrenList() != null) {
- for (final BaseStructure subBank : bank.getChildrenList()) {
- // Does the bank tag match?
- if (subBank.getHeader().getTag() == EvioEventConstants.SCALERS_BANK_TAG) {
-
- LOGGER.fine("found scaler data in bank " + subBank.getHeader().getTag()
- + " and EVIO event " + evioEvent.getEventNumber());
-
- // Get event ID.
- final int eventId = EvioEventUtilities.getEventIdData(evioEvent)[0];
-
- // Get event's timestamp.
- final int timestamp = EvioEventUtilities.getHeadBankData(evioEvent)[3];
-
- // Create scaler data.
- scalerData = new ScalerData(subBank.getIntData(), eventId, timestamp);
-
- break outerBankLoop;
- }
- }
- }
- }
- }
- return scalerData;
- }
-
- /**
* This method will create a <code>ScalerData</code> object and cache it. The current object is first reset to
* <code>null</code> every time this method is called.
*
@@ -109,9 +69,9 @@
// Reset the cached data object.
this.currentScalerData = null;
}
-
- final ScalerData scalerData = this.getScalerData(evioEvent);
+ final ScalerData scalerData = ScalerData.getScalerData(evioEvent);
if (scalerData != null) {
+ LOGGER.info("got scaler data from EVIO event " + evioEvent.getEventNumber());
this.currentScalerData = scalerData;
this.scalerDataSet.add(this.currentScalerData);
}
|