java/sandbox/data-cat/src/main/java/org/srs/datacat/server
--- 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
--- 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
--- 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));
+ }
+ }
+}