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());
}
}
}
|