Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN | |||
EvioFileProducer.java | +111 | -83 | 1.15 -> 1.16 |
can now read in multiple EVIO files; turn off debug prints for now
diff -u -r1.15 -r1.16 --- EvioFileProducer.java 5 May 2012 19:17:16 -0000 1.15 +++ EvioFileProducer.java 30 May 2012 00:56:23 -0000 1.16 @@ -1,8 +1,11 @@
package org.lcsim.hps.evio;
+import java.io.File;
import java.net.InetAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder;
+import java.util.ArrayList; +import java.util.List;
import org.jlab.coda.et.EtAttachment; import org.jlab.coda.et.EtConstants;
@@ -15,20 +18,24 @@
import org.jlab.coda.jevio.EvioEvent; import org.jlab.coda.jevio.EvioReader;
+/** + * + * @author jeremym + * + */
// This is copied and modified from Carl Timmer's EvioProducer class in et 12 org.jlab.coda.et.apps package. // TODO Add option to set number of events in put array.
-// TODO Add option for multiple EVIO input files.
public class EvioFileProducer {
- EvioReader reader; - ByteBuffer byteBuffer; - String evioFileName; - String etName, host; - int port = EtConstants.serverPort; - int group = 1; - int size = 10000; // Default event size. - int delay = 0; - boolean debug = true;
+ private List<File> evioFiles = new ArrayList<File>(); + private EvioReader reader; + private ByteBuffer byteBuffer; + private String etName, host; + private int port = EtConstants.serverPort; + private int group = 1; + private int size = 10000; // Default event size. + private int delay = 0; + private static final boolean debug = false;
EvioFileProducer() { }
@@ -58,7 +65,8 @@
try { for (int i = 0; i < args.length; i++) { if (args[i].equalsIgnoreCase("-e")) {
- evioFileName = new String(args[++i]);
+ //evioFileName = new String(args[++i]);
+ evioFiles.add(new File(args[++i]));
} else if (args[i].equalsIgnoreCase("-f")) { etName = args[++i]; } else if (args[i].equalsIgnoreCase("-host")) {
@@ -128,18 +136,27 @@
// ET name is required. if (etName == null) {
- System.out.println("EVIO file argument is required.");
+ System.out.println("EVIO file name argument is required");
usage(); return; }
- - // EVIO file name is required. - if (evioFileName == null) { - System.out.println("EVIO file argument is required.");
+ + if (this.evioFiles.size() == 0) { + System.out.println("At least one input EVIO file is required.");
usage(); return; }
+ // Check existence of EVIO files. + System.out.println("EVIO input files ..."); + for (File evioFile : evioFiles) { + System.out.println(evioFile.getPath()); + if (!evioFile.exists()) { + System.err.println("EVIO file does not exist: " + evioFile.getPath()); + throw new RuntimeException("EVIO input file does not exist."); + } + } +
// Setup ET system with the command line config. EtSystemOpenConfig config = new EtSystemOpenConfig(etName, host, port); EtSystem sys = new EtSystem(config, EtConstants.debugInfo);
@@ -149,88 +166,99 @@
// array of events EtEvent[] mevs;
+ + // Loop over input EVIO file list. + for (File evioFile : evioFiles) { + + // Open EVIO reader. + System.out.println("Opening next EVIO file: " + evioFile.getPath()); + reader = new EvioReader(evioFile.getPath());
- // Open EVIO reader. - reader = new EvioReader(evioFileName); - - // Print number of events. - if (debug) { - System.out.println("EVIO file opened"); - }
+ // Print number of events. + if (debug) { + System.out.println("EVIO file opened with " + reader.getEventCount() + " events."); + }
- // Event sequence number; starts with 1. - int eventCount = 1;
+ // Ref to current EVIO event. + EvioEvent event;
- // Ref to current EVIO event. - EvioEvent event;
+ // Event sequence number; starts with 1. + int eventCount = 0; + + // Loop until event source is exhausted. + while (true) {
- // Loop until event source is exhausted. - fileLoop: - while (true) {
+ // Get next event. + event = reader.nextEvent(); + ++eventCount; + if (event == null) { + break; + } + + // Try to parse the next event. + try { + reader.parseEvent(event); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Error making EVIO event with sequence number <" + eventCount + "> in file <" + evioFile.getPath() + ">."); + // Attempt to recover from errors by skipping to next event if there are exceptions. + continue; + }
- // Get next event. - event = reader.nextEvent(); - if (event == null) { - break fileLoop; - } - try { - reader.parseEvent(event); - } catch (Exception e) { - e.printStackTrace(); - System.out.println("Error making EVIO event with sequence number <" + eventCount + ">."); - continue; - }
+ if (debug) { + System.out.println("new events - size=" + size + "; group=" + group); + }
- if (debug) { - System.out.println("new events - size=" + size + "; group=" + group); - }
+ // Create a new array of ET events. This always has one event. + mevs = sys.newEvents( + att, // attachment + Mode.SLEEP, // wait mode + false, // create a buffer + 0, // delay + 1, // number of events + size, // size of event but overwritten later + group); // group number; default value is arbitrary + + // Delay for X millis if applicable. + if (delay > 0) { + Thread.sleep(delay); + }
- mevs = sys.newEvents( - att, // attachment - Mode.SLEEP, // wait mode - false, // create a buffer - 0, // delay - 1, // number of events - size, // size of event but overwritten later - group); // group number; default value is arbitrary
+ // Write the next EVIO event to the EtEvent's buffer. + ByteBuffer buf = mevs[0].getDataBuffer(); + buf.order(ByteOrder.nativeOrder()); + EventWriter writer = new EventWriter(buf, 100000, 100, null, null); + writer.writeEvent(event); + try { + writer.close(); + } catch (Exception e) { + System.out.println("Caught exception while closing writer."); + e.printStackTrace(); + } + mevs[0].setLength(buf.position()); + mevs[0].setByteOrder(ByteOrder.nativeOrder()); + if (debug) { + for (EtEvent mev : mevs) { + System.out.println("event length = " + mev.getLength() + ", remaining bytes: " + mev.getDataBuffer().remaining()); + } + }
- if (delay > 0) { - Thread.sleep(delay); - }
+ // Put events onto the ET ring. + sys.putEvents(att, mevs);
- // Write EVIO event to EtEvent's buffer. - ByteBuffer buf = mevs[0].getDataBuffer(); - buf.order(ByteOrder.nativeOrder()); - - EventWriter writer = new EventWriter(buf, 100000, 100, null, null); - writer.writeEvent(event); - try { - writer.close(); - } catch (Exception e) { - System.out.println("Caught exception while closing writer."); - e.printStackTrace(); - } - mevs[0].setLength(buf.position()); - mevs[0].setByteOrder(ByteOrder.nativeOrder()); - if (debug) { - for (EtEvent mev : mevs) { - System.out.println("event length = " + mev.getLength() + ", remaining bytes: " + mev.getDataBuffer().remaining());
+ if (debug) { + System.out.println("Wrote event #" + eventCount + " to ET"); + System.out.println("-------------------------------"); + ++eventCount;
} }
- // Put events onto ET ring. - sys.putEvents(att, mevs); - - if (debug) { - System.out.println("Wrote event #" + eventCount + " to ET"); - System.out.println("-------------------------------"); - ++eventCount; - }
+ reader.close();
} // Cleanup.
- sys.close(); - reader.close();
+ sys.close(); +
} catch (Exception e) { throw new RuntimeException(e); }
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1