Print

Print


Commit in java/sandbox/data-cat/src on MAIN
main/java/org/srs/datacat/server/EvioContentChecker.java+112added 475
                                /EvioContentCheckerCreator.java+14added 475
test/java/org/srs/datacat/server/EvioContentCheckerTest.java+26added 475
+152
3 added files
Add basic file checker for EVIO format.

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
EvioContentChecker.java added at 475
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentChecker.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentChecker.java	2014-04-11 01:52:34 UTC (rev 475)
@@ -0,0 +1,112 @@
+package org.srs.datacat.server;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.hps.evio.EventConstants;
+import org.jlab.coda.jevio.EvioEvent;
+import org.jlab.coda.jevio.EvioException;
+import org.jlab.coda.jevio.EvioReader;
+
+/**
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class EvioContentChecker implements ContentChecker {
+
+    long minRunNumber;
+    long maxRunNumber;
+    long nevents;
+    String status;
+    Map<String, Object> metadata;
+
+    @Override
+    public void setLocation(long arg0, URL url) throws IOException {
+
+        minRunNumber = Integer.MAX_VALUE;
+        maxRunNumber = Integer.MIN_VALUE;
+        status = "OK";
+        metadata = new HashMap<String, Object>();
+
+        if (!url.getProtocol().equals("file")) {
+            throw new IOException("Only file protocol is supported.");
+        }
+        EvioReader reader = null;
+        try {
+            reader = new EvioReader(new File(url.getPath()));
+            EvioEvent event = reader.nextEvent();
+            while (event != null) {
+                int[] data = event.getIntData();
+                if (EventConstants.isPreStartEvent(event)) {
+                    int runNumber = data[1];
+                    if (runNumber < minRunNumber) {
+                        minRunNumber = runNumber;
+                    }
+                    if (runNumber > maxRunNumber) {
+                        maxRunNumber = runNumber;
+                    }
+                } else if (EventConstants.isGoEvent(event)) {
+                    int seconds = data[0];
+                    long time = ((long) seconds) * 1000000000;
+                    if (!metadata.containsKey("tStart")) {
+                        metadata.put("tStart", new Date(((long) seconds) * 1000));
+                    } else {
+                        throw new RuntimeException("More than one Go record was found!");
+                    }
+                } else if (EventConstants.isEndEvent(event)) {
+                    int seconds = data[0];
+                    long time = ((long) seconds) * 1000000000;
+                    if (!metadata.containsKey("tEnd")) {
+                        metadata.put("tEnd", new Date(((long) seconds) * 1000));
+                    } else {
+                        throw new RuntimeException("More than one End record was found!");
+                    }
+                } else if (isPhysicsEvent(event)) {
+                    ++nevents;
+                }
+                event = reader.nextEvent();
+            }
+        } catch (EvioException e) {
+            throw new IOException(e);
+        } finally {
+            if (reader != null)
+                reader.close();    
+        }       
+    }
+
+    private boolean isPhysicsEvent(EvioEvent event) {
+        return (event.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG);
+    }
+
+    @Override
+    public long getEventCount() throws IOException {
+        return nevents;
+    }
+
+    @Override
+    public Map<String, Object> getMetaData() throws IOException {
+        return metadata;
+    }
+
+    @Override
+    public long getRunMax() throws IOException {
+        return maxRunNumber;
+    }
+
+    @Override
+    public long getRunMin() throws IOException {
+        return minRunNumber;
+    }
+
+    @Override
+    public String getStatus() throws IOException {
+        return status;
+    }
+
+    @Override
+    public void close() throws IOException {
+    }
+}

java/sandbox/data-cat/src/main/java/org/srs/datacat/server
EvioContentCheckerCreator.java added at 475
--- java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentCheckerCreator.java	                        (rev 0)
+++ java/sandbox/data-cat/src/main/java/org/srs/datacat/server/EvioContentCheckerCreator.java	2014-04-11 01:52:34 UTC (rev 475)
@@ -0,0 +1,14 @@
+package org.srs.datacat.server;
+
+
+public class EvioContentCheckerCreator implements ContentCheckerCreator {
+
+    public ContentChecker create() {
+        return new EvioContentChecker();
+    }
+
+    public void free(ContentChecker arg0) {
+        return;
+    }
+
+}

java/sandbox/data-cat/src/test/java/org/srs/datacat/server
EvioContentCheckerTest.java added at 475
--- java/sandbox/data-cat/src/test/java/org/srs/datacat/server/EvioContentCheckerTest.java	                        (rev 0)
+++ java/sandbox/data-cat/src/test/java/org/srs/datacat/server/EvioContentCheckerTest.java	2014-04-11 01:52:34 UTC (rev 475)
@@ -0,0 +1,26 @@
+package org.srs.datacat.server;
+
+import java.io.File;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+
+public class EvioContentCheckerTest extends TestCase {
+    
+    static String filePath = "/nfs/slac/g/hps3/data/testrun/runs/evio/hps_001351.evio.0";
+    
+    public void testEvioContentChecker() throws Exception {        
+        ContentChecker checker = new EvioContentCheckerCreator().create();
+        checker.setLocation(-1, new File(filePath).toURL());
+        System.out.println("event count: " + checker.getEventCount());
+        System.out.println("run max: " + checker.getRunMax());
+        System.out.println("run min: " + checker.getRunMin());
+        System.out.println("status: " + checker.getStatus());        
+        System.out.println("meta data ...");
+        Map<String, Object> metaData = checker.getMetaData();
+        for (String key : metaData.keySet()) {
+            System.out.println("  " + key + ": " + metaData.get(key));
+        }
+    }
+}
SVNspam 0.1