Print

Print


Author: [log in to unmask]
Date: Mon Aug 31 12:16:12 2015
New Revision: 3467

Log:
Corrections to EVIO file meta data reader.

Modified:
    java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaData.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaDataReader.java

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaData.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaData.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaData.java	Mon Aug 31 12:16:12 2015
@@ -2,6 +2,8 @@
 
 import java.io.File;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Meta data that can be extracted from EVIO files.
@@ -312,4 +314,28 @@
                 + this.hasEnd + ", run: " + this.run + ", fileNumber: " + sequence + ", startEvent:  "
                 + this.startEvent + ", endEvent: " + endEvent + " }";
     }
+    
+    /**
+     * Convert data to a map with names and values (int, float or string).
+     * 
+     * @return the metadata converted to a map
+     */
+    public Map<String, Object> toMap() {
+        Map<String, Object> metadataMap = new HashMap<String, Object>();
+        metadataMap.put("badEventCount", badEventCount);
+        metadataMap.put("size", byteCount);
+        metadataMap.put("endDate", endDate.getTime());
+        metadataMap.put("endEvent", endEvent);
+        metadataMap.put("endDate", endDate.getTime());
+        metadataMap.put("endEvent", endEvent);
+        metadataMap.put("eventCount", eventCount);
+        metadataMap.put("evioFile", evioFile.getPath());
+        metadataMap.put("hasEnd", hasEnd ? 1 : 0);
+        metadataMap.put("hasPrestart", hasPrestart ? 1 : 0);
+        metadataMap.put("run", run);
+        metadataMap.put("fileNumber", sequence);
+        metadataMap.put("startDate", startDate.getTime());
+        metadataMap.put("startEvent", startEvent);
+        return metadataMap;
+    }
 }

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaDataReader.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaDataReader.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/EvioFileMetaDataReader.java	Mon Aug 31 12:16:12 2015
@@ -6,7 +6,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
@@ -25,6 +24,9 @@
      */
     private static Logger LOGGER = LogUtil.create(EvioFileMetaDataReader.class, new DefaultLogFormatter(), Level.ALL);
 
+    /**
+     * Convert from seconds to millis.
+     */
     final static int MILLIS = 1000;
 
     /**
@@ -47,11 +49,11 @@
         int byteCount = 0;
         boolean hasPrestart = false;
         boolean hasEnd = false;
-        int[] headBankData = null;
         int[] eventIdData = null;
         Integer run = null;
         Integer endEvent = null;
         Integer startEvent = null;
+        Long lastTimestamp = null;
 
         int nPhysicsEventsProcessed = 0;
 
@@ -66,6 +68,7 @@
                 try {
                     evioEvent = evioReader.parseNextEvent();
                     if (evioEvent == null) {
+                        LOGGER.info("done reading events");
                         break;
                     }
                 } catch (final Exception e) {
@@ -86,7 +89,7 @@
                         LOGGER.info("set run to " + run);
                     }
                 } else if (EventTagConstant.END.equals(evioEvent)) {
-                    LOGGER.info("found END");
+                    LOGGER.info("found END event");
                     hasEnd = true;
                     final int[] controlEventData = EvioEventUtilities.getControlEventData(evioEvent);
                     final long timestamp = controlEventData[0] * 1000L;
@@ -97,12 +100,12 @@
                         LOGGER.info("set run to " + run);
                     }
                 } else if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
-                    // LOGGER.info("physics event " + evioEvent.getEventNumber());
-                    final BaseStructure headBank = EvioEventUtilities.getHeadBank(evioEvent);
-                    headBankData = headBank.getIntData();
+                    final int[] headBankData = EvioEventUtilities.getHeadBankData(evioEvent);
                     if (startDate == null) {
-                        startDate = new Date(headBankData[3] * 1000);
-                        LOGGER.info("set start date to " + endDate + " from physics event");
+                        if (headBankData[3] != 0) {
+                            startDate = new Date(headBankData[3] * 1000L);
+                            LOGGER.info("set start date to " + startDate + " from physics event");
+                        }
                     }
                     if (run == null) {
                         run = headBankData[1];
@@ -113,6 +116,9 @@
                         startEvent = eventIdData[0];
                         LOGGER.info("set start event " + startEvent);
                     }
+                    if (headBankData[3] != 0) {
+                        lastTimestamp = headBankData[3] * 1000L;
+                    }
                     ++nPhysicsEventsProcessed;
                 }
                 LOGGER.getHandlers()[0].flush();
@@ -121,10 +127,8 @@
             LOGGER.info("processed " + nPhysicsEventsProcessed + " in " + evioFile.getPath());
 
             if (endDate == null) {
-                if (headBankData != null) {
-                    endDate = new Date(headBankData[3] * 1000);
-                    LOGGER.info("set end date to " + endDate + " from last head bank");
-                }
+                endDate = new Date(lastTimestamp);
+                LOGGER.info("set end date to " + endDate + " from last timestamp " + lastTimestamp);
             }
             if (eventIdData != null) {
                 endEvent = eventIdData[0];
@@ -133,7 +137,7 @@
         } catch (EvioException | IOException e) {
             throw new RuntimeException(e);
         }
-
+                
         metaData.setStartDate(startDate);
         metaData.setEndDate(endDate);
         metaData.setBadEventCount(badEventCount);
@@ -143,12 +147,8 @@
         metaData.setHasEnd(hasEnd);
         metaData.setRun(run);
         metaData.setSequence(fileNumber);
-        if (endEvent != null) {
-            metaData.setEndEvent(endEvent);
-        }
-        if (startEvent != null) {
-            metaData.setStartEvent(startEvent);
-        }
+        metaData.setEndEvent(endEvent);        
+        metaData.setStartEvent(startEvent);
 
         return metaData;
     }