Author: [log in to unmask] Date: Wed Nov 26 17:49:54 2014 New Revision: 1601 Log: handle new control event structure Modified: java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java java/trunk/record-util/src/main/java/org/hps/record/evio/EvioEventUtilities.java Modified: java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java Wed Nov 26 17:49:54 2014 @@ -301,7 +301,7 @@ if (EvioEventUtilities.isPreStartEvent(evioEvent)) { // Get the pre start event's int data bank. - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); // Does the int data bank actually exist? if (data != null) { @@ -327,7 +327,7 @@ eventBuilder.readEvioEvent(evioEvent); if (EvioEventUtilities.isEndEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); int seconds = data[0]; int totalEvents = data[2]; logger.info("got EVIO end event with " + totalEvents + " events and " + seconds + " seconds"); Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Wed Nov 26 17:49:54 2014 @@ -26,14 +26,14 @@ */ public class LCSimTestRunEventBuilder implements LCSimEventBuilder, ConditionsListener { - String detectorName = null; + String detectorName = null; ECalEvioReader ecalReader = null; SVTEvioReader svtReader = null; protected int run = 0; //current run number, taken from prestart and end events protected long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any) protected int sspCrateBankTag = 0x1; //bank ID of the crate containing the SSP protected int sspBankTag = 0xe106; //SSP bank's tag - protected static Logger logger = LogUtil.create(LCSimTestRunEventBuilder.class); + protected static Logger logger = LogUtil.create(LCSimTestRunEventBuilder.class); public LCSimTestRunEventBuilder() { ecalReader = new ECalEvioReader(0x1, 0x2); @@ -43,7 +43,7 @@ @Override public void setDetectorName(String detectorName) { - this.detectorName = detectorName; + this.detectorName = detectorName; } public void setEcalHitCollectionName(String ecalHitCollectionName) { @@ -53,11 +53,11 @@ @Override public void readEvioEvent(EvioEvent evioEvent) { if (EvioEventUtilities.isSyncEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); int seconds = data[0]; logger.info("Sync event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count since last sync " + data[1] + ", event count so far " + data[2] + ", status " + data[3]); } else if (EvioEventUtilities.isPreStartEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); if (data != null) { int seconds = data[0]; time = ((long) seconds) * 1000000000; @@ -65,19 +65,19 @@ logger.info("Prestart event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", run " + run + ", run type " + data[2]); } } else if (EvioEventUtilities.isGoEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); if (data != null) { int seconds = data[0]; time = ((long) seconds) * 1000000000; logger.info("Go event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]); } } else if (EvioEventUtilities.isPauseEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); int seconds = data[0]; time = ((long) seconds) * 1000000000; logger.info("Pause event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]); } else if (EvioEventUtilities.isEndEvent(evioEvent)) { - int[] data = evioEvent.getIntData(); + int[] data = EvioEventUtilities.getControlEventData(evioEvent); int seconds = data[0]; time = ((long) seconds) * 1000000000; run = 0; @@ -128,7 +128,7 @@ if (eventID == null) { logger.warning("No event ID bank found"); eventID = new int[3]; - } else { + } else { logger.finest("Read EVIO event number " + eventID[0]); if (eventID[1] != 1) { logger.warning("Trigger code is usually 1; got " + eventID[1]); @@ -146,7 +146,7 @@ // Create a new LCSimEvent. EventHeader lcsimEvent = new BaseLCSimEvent(run, eventID[0], detectorName, time); - + lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0); return lcsimEvent; } @@ -177,8 +177,8 @@ return triggerData; } - @Override - public void conditionsChanged(ConditionsEvent conditionsEvent) { - ecalReader.initialize(); - } + @Override + public void conditionsChanged(ConditionsEvent conditionsEvent) { + ecalReader.initialize(); + } } 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 Wed Nov 26 17:49:54 2014 @@ -6,21 +6,25 @@ import static org.hps.record.evio.EvioEventConstants.PHYSICS_EVENT_TAG; import static org.hps.record.evio.EvioEventConstants.PRESTART_EVENT_TAG; import static org.hps.record.evio.EvioEventConstants.SYNC_EVENT_TAG; +import org.jlab.coda.jevio.BaseStructure; import org.jlab.coda.jevio.EvioEvent; /** - * This is a set of basic static utility methods on <code>EvioEvent</code> objects. + * This is a set of basic static utility methods on <code>EvioEvent</code> + * objects. + * * @author Jeremy McCormick <[log in to unmask]> */ public final class EvioEventUtilities { - - private EvioEventUtilities() { + + private EvioEventUtilities() { } - + /** - * Check if the EVIO event is a PRE START event indicating - * the beginning of a run. + * Check if the EVIO event is a PRE START event indicating the beginning of + * a run. + * * @param event The EvioEvent. * @return True if the event is a pre start event. */ @@ -30,6 +34,7 @@ /** * Check if the EVIO event is a GO event. + * * @param event The EvioEvent. * @return True if the event is a go event. */ @@ -39,6 +44,7 @@ /** * Check if the EVIO event is a PAUSE event. + * * @param event The EvioEvent. * @return True if the event is a pause event. */ @@ -48,28 +54,71 @@ /** * Check if this event is an END event. + * * @param event The EvioEvent. * @return True if this event is an end event. */ public static boolean isEndEvent(EvioEvent event) { return event.getHeader().getTag() == END_EVENT_TAG; } - + /** * Check if this event has physics data. + * * @param event The EvioEvent. * @return True if this event is a physics event. */ public static boolean isPhysicsEvent(EvioEvent event) { return event.getHeader().getTag() == PHYSICS_EVENT_TAG; } - + /** * Check if this event is a SYNC event. + * * @param event The EvioEvent. * @return True if this event is a SYNC event. */ public static boolean isSyncEvent(EvioEvent event) { return event.getHeader().getTag() == SYNC_EVENT_TAG; } + + /** + * Extract the CODA run data stored in a control event. + * + * @param event The EvioEvent. + * @return The int data for the control event. Null if the event is not a + * control event, or the int bank for the control event is not found. + */ + public static int[] getControlEventData(EvioEvent event) { + int eventTag = event.getHeader().getTag(); + System.out.format("event tag %d\n", eventTag); + switch (eventTag) { + case PRESTART_EVENT_TAG: + case PAUSE_EVENT_TAG: + case END_EVENT_TAG: + case SYNC_EVENT_TAG: + case GO_EVENT_TAG: + break; + default: + return null; + } + + int[] data = event.getIntData(); + if (data != null) { + System.out.format("got data\n"); + + return data; + } else { + System.out.format("didn't get data\n"); + + for (BaseStructure bank : event.getChildren()) { + System.out.format("got bank with tag %d\n", bank.getHeader().getTag()); + if (bank.getHeader().getTag() == eventTag) { + System.out.format("got data from bank\n"); + return bank.getIntData(); + } + } + return null; + } + } }