Print

Print


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;
+        }
+    }
 }