Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN
EvioFileProducer.java+111-831.15 -> 1.16
can now read in multiple EVIO files; turn off debug prints for now

hps-java/src/main/java/org/lcsim/hps/evio
EvioFileProducer.java 1.15 -> 1.16
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);
         }
CVSspam 0.2.12


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