Print

Print


Author: [log in to unmask]
Date: Fri May  1 11:04:54 2015
New Revision: 2871

Log:
Sync changes from laptop.

Modified:
    java/trunk/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java

Modified: java/trunk/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/jeremym/EvioFileScanner.java	Fri May  1 11:04:54 2015
@@ -22,7 +22,9 @@
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
+import org.hps.record.evio.EvioEventConstants;
 import org.hps.record.evio.EvioEventUtilities;
+import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
@@ -37,7 +39,11 @@
 // -end date (from END)
 // -total number of events
 //
+// -get trigger config
+// -get SVT config
+//
 // Command line args:
+
 // -start and end run number filter (outside range will be excluded)
 // -list of run numbers (not in list will be excluded)
 // -output timestamp file (when dir walk ends)
@@ -48,11 +54,33 @@
     static class EvioFileList extends ArrayList<File> {
 
         public File first() {
-            return get(0);
+            return this.get(0);
+        }
+
+        public int getTotalEvents() {
+            int totalEvents = 0;
+            for (final File file : this) {
+                EvioReader reader = null;
+                try {
+                    reader = new EvioReader(file, false);
+                    totalEvents += reader.getEventCount();
+                } catch (EvioException | IOException e) {
+                    throw new RuntimeException(e);
+                } finally {
+                    if (reader != null) {
+                        try {
+                            reader.close();
+                        } catch (final IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }
+            return totalEvents;
         }
 
         public File last() {
-            return get(size() - 1);
+            return this.get(this.size() - 1);
         }
 
         public void sort() {
@@ -126,8 +154,8 @@
         }
 
         void sortFiles() {
-            for (final Integer run : keySet()) {
-                get(run).sort();
+            for (final Integer run : this.keySet()) {
+                this.get(run).sort();
             }
         }
     }
@@ -153,7 +181,8 @@
 
     static Integer getRunNumber(final File file) {
         final String name = file.getName();
-        return Integer.parseInt(name.substring(0, name.indexOf(".")).replace("hps_", ""));
+        // FIXME: Better way would be opening the file and getting the PRESTART or head bank value of run.
+        return Integer.parseInt(name.substring(0, name.indexOf(".")).replace("hps_", "").replace("cosmic_", ""));
     }
 
     static Integer getSequenceNumber(final File file) {
@@ -169,19 +198,23 @@
 
     File rootDir = new File(System.getProperty("user.dir"));
 
-    Date getRunEnd(final File file) {
+    Date getDate(final File file, final int eventTag, final int gotoEvent) {
         Date date = null;
         EvioReader reader = null;
         try {
             reader = new EvioReader(file.getPath(), false);
             EvioEvent event;
+            if (gotoEvent > 0) {
+                reader.gotoEventNumber(gotoEvent);
+            } else if (gotoEvent < 0) {
+                reader.gotoEventNumber(reader.getEventCount() + gotoEvent);
+            }
             while ((event = reader.parseNextEvent()) != null) {
-                if (EvioEventUtilities.isEndEvent(event)) {
+                if (event.getHeader().getTag() == eventTag) {
                     final int[] data = EvioEventUtilities.getControlEventData(event);
-                    long seconds = (long)data[0];
-                    //System.out.printf("END control: %d %d %d", data[0], data[1], data[2]);
+                    final long seconds = data[0];
+                    System.out.printf("control: %d %d %d %n", data[0], data[1], data[2]);
                     date = new Date(seconds * MILLISECONDS);
-                    //System.out.println("END date: " + date);
                     break;
                 }
             }
@@ -199,30 +232,69 @@
         return date;
     }
 
+    Date getHeadBankDate(final EvioEvent event) {
+        Date date = null;
+        final BaseStructure headBank = EvioEventUtilities.getHeadBank(event);
+        if (headBank != null) {
+            final int[] data = headBank.getIntData();
+            final long time = data[3];
+            System.out.printf("head bank: %d %d %d %d %d%n", data[0], data[1], data[2], data[3], data[4]);
+            System.out.println("time from head bank: " + time);
+            date = new Date(time);
+        }
+        return date;
+    }
+
+    Date getRunEnd(final File file) {
+        System.out.println("getRunEnd");
+        Date date = this.getDate(file, EvioEventConstants.END_EVENT_TAG, -10);
+        if (date == null) {
+            System.out.println("END tag not found; looking at last event ...");
+            EvioReader reader = null;
+            try {
+                reader = new EvioReader(file.getPath(), false);
+                System.out.println("event count: " + reader.getEventCount());
+                final EvioEvent lastEvent = reader.getEvent(reader.getEventCount() - 1);
+                reader.parseEvent(lastEvent);
+                System.out.println("getting date from last event " + lastEvent.getEventNumber());
+                date = this.getHeadBankDate(lastEvent);
+            } catch (EvioException | IOException e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (reader != null) {
+                    try {
+                        reader.close();
+                    } catch (final IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return date;
+    }
+
     Date getRunStart(final File file) {
-        Date date = null;
-        EvioReader reader = null;
-        try {
-            reader = new EvioReader(file.getPath(), false);
-            EvioEvent event;
-            while ((event = reader.parseNextEvent()) != null) {
-                if (EvioEventUtilities.isPreStartEvent(event)) {
-                    final int[] data = EvioEventUtilities.getControlEventData(event);
-                    //System.out.printf("PRESTART control: %d %d %d%n", data[0], data[1], data[2]);
-                    long seconds = (long)data[0];
-                    date = new Date(seconds * MILLISECONDS);
-                    //System.out.println("PRESTART date: " + date);
-                    break;
-                }
-            }
-        } catch (EvioException | IOException e) {
-            throw new RuntimeException(e);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (final IOException e) {
-                    e.printStackTrace();
+        System.out.println("getRunStart");
+        Date date = this.getDate(file, EvioEventConstants.PRESTART_EVENT_TAG, 0);
+        if (date == null) {
+            System.out.println("PRESTART not found; looking at first event ...");
+            EvioReader reader = null;
+            try {
+                reader = new EvioReader(file.getPath(), false);
+                EvioEvent event = null;
+                while (!EvioEventUtilities.isPhysicsEvent(event = reader.parseNextEvent())) {
+                }
+                System.out.println("looking at head bank of event " + event.getEventNumber());
+                date = this.getHeadBankDate(event);
+            } catch (EvioException | IOException e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (reader != null) {
+                    try {
+                        reader.close();
+                    } catch (final IOException e) {
+                        e.printStackTrace();
+                    }
                 }
             }
         }
@@ -269,8 +341,9 @@
             final EvioFileList files = runMap.get(run);
             System.out.println("first file " + files.first());
             System.out.println("last file " + files.last());
-            System.out.println("started at " + getRunStart(files.first()));
-            System.out.println("ended at " + getRunEnd(files.last()));
+            System.out.println("started at " + this.getRunStart(files.first()));
+            System.out.println("ended at " + this.getRunEnd(files.last()));
+            System.out.println("total events: " + files.getTotalEvents());
         }
     }
 }