Print

Print


Author: [log in to unmask]
Date: Fri May 29 14:13:37 2015
New Revision: 3060

Log:
Code cleanup and reorg.  Should have no effect on LCIO output.

Modified:
    java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java

Modified: java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java
 =============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java	(original)
+++ java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java	Fri May 29 14:13:37 2015
@@ -36,12 +36,13 @@
 import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
 import org.lcsim.event.EventHeader;
 import org.lcsim.lcio.LCIOWriter;
+import org.lcsim.util.log.DefaultLogFormatter;
 import org.lcsim.util.log.LogUtil;
 
 /**
  * <p>
- * This class converts EVIO to LCIO, performing an LCSim job in the same session. The processed
- * events are then (optionally) written to disk using an LCIOWriter.
+ * This class converts EVIO to LCIO, performing an LCSim job in the same session. The processed events are then (optionally) written to disk using an
+ * LCIOWriter.
  * <p>
  * To run this class from the command line:<br>
  * java -cp hps-distribution-bin.jar EvioToLcio [options] [evioFiles]
@@ -51,9 +52,8 @@
  * <p>
  * Extra arguments are treated as paths to EVIO files.
  * <p>
- * This class attempts to automatically configure itself for Test Run or Engineering Run based on
- * the run numbers in the EVIO file. It will use an appropriate default detector unless one is given
- * on the command line, and it will also use the correct event builder. It will not handle jobs
+ * This class attempts to automatically configure itself for Test Run or Engineering Run based on the run numbers in the EVIO file. It will use an
+ * appropriate default detector unless one is given on the command line, and it will also use the correct event builder. It will not handle jobs
  * correctly with files from both the Test and Engineering Run, so don't do this!
  * <p>
  * The conditions system can be initialized in one of three ways.<br/>
@@ -63,78 +63,183 @@
  * <li>run number from a header bank in an event</li>
  * </ol>
  * <p>
- * In the case where a file has no pre start event and there are header banks present, 
- * the "-m" command line option can be used to buffer a number of EVIO events.  If there is a
- * head bank found while adding these events to queue, the conditions system will be initialized
- * from it.
+ * In the case where a file has no pre start event and there are header banks present, the "-m" command line option can be used to buffer a number of
+ * EVIO events. If there is a head bank found while adding these events to queue, the conditions system will be initialized from it.
  *
  * @author Jeremy McCormick <[log in to unmask]>
  * @author Sho Uemura <[log in to unmask]>
  */
-// TODO: Logger should print tracebacks.  See Driver's setup for example of this.
 public class EvioToLcio {
 
-    // The default steering resource, which basically does nothing except print event numbers.
+    /**
+     * The default steering resource, which basically does nothing except print event numbers.
+     */
     private static final String DEFAULT_STEERING_RESOURCE = "/org/hps/steering/EventMarker.lcsim";
 
-    // The command line options which will be defined in the constructor.
-    Options options = null;
-
-    // The class's logger.
-    static Logger logger = LogUtil.create(EvioToLcio.class);
-    static {
-        logger.setLevel(Level.INFO);
+    /**
+     * Setup logging for this class.
+     */
+    private static Logger LOGGER = LogUtil.create(EvioToLcio.class, new DefaultLogFormatter(), Level.INFO);
+
+    /**
+     * Run the EVIO to LCIO converter from the command line.
+     *
+     * @param args The command line arguments.
+     */
+    public static void main(final String[] args) {
+        final EvioToLcio evioToLcio = new EvioToLcio();
+        evioToLcio.run(args);
     }
 
-    // The LCSim event builder used to convert from EVIO.
-    LCSimEventBuilder eventBuilder = null;
-
-    // The detector name for conditions.
-    String detectorName;
-
-    // The run number for conditions.
-    Integer runNumber = null;
-
-    /**
-     * The default constructor, which defines command line arguments and sets the log level.
+    /**
+     * The detector name for conditions.
+     */
+    private String detectorName;
+
+    /**
+     * The LCSim event builder used to convert from EVIO.
+     */
+    private LCSimEventBuilder eventBuilder = null;
+
+    /** 
+     * The command line options which will be defined in the constructor.
+     */
+    private Options options = null;
+
+    /**
+     * The run number for conditions.
+     */
+    private Integer runNumber = null;
+
+    /**
+     * The default constructor, which defines command line arguments and sets the default log level.
      */
     protected EvioToLcio() {
-        logger.config("initializing EVIO to LCIO converter");
+        LOGGER.config("initializing EVIO to LCIO converter ...");
         options = new Options();
-        options.addOption(new Option("d", true, "name of the detector to use for LCSim conditions (required)"));
+        options.addOption(new Option("d", true, "detector name (required)"));
         options.getOption("d").setRequired(true);
-        options.addOption(new Option("f", true, "path to a text file containing a list of EVIO files to process"));
-        options.addOption(new Option("L", true, "log level (INFO, FINE, FINEST, etc.)"));
-        options.addOption(new Option("x", true, "XML steeering file for processing LCIO events"));
+        options.addOption(new Option("f", true, "text file containing a list of EVIO files"));
+        options.addOption(new Option("L", true, "log level (INFO, FINE, etc.)"));
+        options.addOption(new Option("x", true, "LCSim steeering file for processing the LCIO events"));
         options.addOption(new Option("r", false, "interpret steering from -x argument as a resource instead of a file"));
-        options.addOption(new Option("D", true, "pass a variable to the steering file with format -Dname=value"));
+        options.addOption(new Option("D", true, "define a steering file variable with format -Dname=value"));
         options.addOption(new Option("l", true, "path of output LCIO file"));
         options.addOption(new Option("R", true, "fixed run number which will override run numbers of input files"));
         options.addOption(new Option("n", true, "maximum number of events to process in the job"));
-        options.addOption(new Option("b", false, "enable headless mode which will not show plots OR allow writing them to graphics files"));
+        options.addOption(new Option("b", false, "enable headless mode in which plots will not show"));
         options.addOption(new Option("v", false, "print EVIO XML for each event"));
         options.addOption(new Option("m", true, "set the max event buffer size"));
-        options.addOption(new Option("t", true, "specify a conditions system tag to use"));
-        options.addOption(new Option("M", false,"Memory map file before reading"));
-        logger.setLevel(Level.FINE);
+        options.addOption(new Option("t", true, "specify a conditions tag to use"));
+        options.addOption(new Option("M", false, "use memory mapping instead of sequential reading"));
     }
 
     /**
-     * Run the EVIO to LCIO converter from the command line.
+     * Buffer up to <code>maxBufferSize</code> events in the <code>eventQueue</code>. This method will also initialize the conditions system using a
+     * run number if a header bank is found.
+     *
+     * @param reader the EVIO reader
+     * @param eventQueue the event queue
+     * @param maxBufferSize the maximum number of records to buffer
+     */
+    private void bufferEvents(final EvioReader reader, final EvioEventQueue eventQueue, final int maxBufferSize) {
+        EvioEvent evioEvent = null;
+        while (eventQueue.size() < maxBufferSize) {
+            try {
+                // Read the next event.
+                evioEvent = reader.nextEvent();
+
+                if (evioEvent == null) { // This catches an end of file or bad event.
+                    break;
+                }
+
+                // Add the event to the queue.
+                eventQueue.addRecord(evioEvent);
+
+            } catch (IOException | EvioException e) {
+                LOGGER.log(Level.SEVERE, e.getMessage(), e);
+            }
+
+            if (evioEvent != null) {
+
+                // Parse the event.
+                try {
+                    reader.parseEvent(evioEvent);
+                } catch (final EvioException e) {
+                    LOGGER.log(Level.SEVERE, e.getMessage(), e);
+                    continue;
+                }
+
+                // Is conditions system not frozen?
+                if (!DatabaseConditionsManager.getInstance().isFrozen()) {
+
+                    // Get head bank from event.
+                    final BaseStructure headBank = EvioEventUtilities.getHeadBank(evioEvent);
+
+                    // Is head bank available in this event?
+                    if (headBank != null) {
+
+                        // Get the run number from the head bank.
+                        runNumber = headBank.getIntData()[1];
+                        LOGGER.finer("got head bank with run number " + runNumber);
+
+                        // Check if the conditions system needs to be updated from the head bank.
+                        this.checkConditions(runNumber, false);
+                        
+                    } else {
+                        LOGGER.finest("event " + evioEvent.getEventNumber() + " does not have a head bank");
+                    }
+                }
+            }
+        }
+        LOGGER.finer("buffered " + eventQueue.size() + " events");
+    }
+
+    /**
+     * Check if the conditions system and event builder need to be initialized or updated given a run number.
+     *
+     * @param runNumber The run number.
+     * @param freeze True to freeze conditions system after it is setup.
+     */
+    private void checkConditions(final int runNumber, final boolean freeze) {
+
+        // Is the event builder uninitialized?
+        if (eventBuilder == null) {
+            // Setup event builder.
+            this.setupEventBuilder(runNumber);
+        }
+
+        // Update the conditions system with the new run number.
+        try {
+            // This call may be ignored by the conditions system if the run number is not new.
+            ConditionsManager.defaultInstance().setDetector(detectorName, runNumber);
+        } catch (final ConditionsNotFoundException e) {
+            throw new RuntimeException("Error initializing conditions system.", e);
+        }
+
+        if (freeze) {
+            // Freeze the conditions system so subsequent run numbers are ignored.
+            DatabaseConditionsManager.getInstance().freeze();
+        }
+    }
+
+    /**
+     * Print the CLI usage and exit.
+     */
+    private void printUsage() {
+        System.out.println("EvioToLcio [options] [evioFiles]");
+        final HelpFormatter help = new HelpFormatter();
+        help.printHelp(" ", options);
+        System.exit(1);
+    }
+
+    /**
+     * This method will execute the EVIO to LCIO conversion and optionally process the events with LCSim Drivers from a steering file. Then the
+     * resultant LCIO events will be written to disk if this option is enabled in the command line arguments.
+     *
      * @param args The command line arguments.
      */
-    public static void main(String[] args) {
-        EvioToLcio evioToLcio = new EvioToLcio();
-        evioToLcio.run(args);
-    }
-
-    /**
-     * This method will execute the EVIO to LCIO conversion and optionally process the events with
-     * LCSim Drivers from a steering file. Then the resultant LCIO events will be written to disk if
-     * this option is enabled in the command line arguments.
-     * @param args The command line arguments.
-     */
-    public void run(String[] args) {
+    public void run(final String[] args) {
 
         int maxEvents = -1;
         int nEvents = 0;
@@ -142,47 +247,47 @@
 
         // Parse the command line options.
         if (args.length == 0) {
-            printUsage();
-        }
-        CommandLineParser parser = new PosixParser();
+            this.printUsage();
+        }
+        final CommandLineParser parser = new PosixParser();
         CommandLine cl = null;
         try {
             cl = parser.parse(options, args);
-        } catch (ParseException e) {
+        } catch (final ParseException e) {
             throw new RuntimeException("Problem parsing command line options.", e);
         }
 
         // Set the log level.
         if (cl.hasOption("L")) {
-            Level level = Level.parse(cl.getOptionValue("L").toUpperCase());
-            
+            final Level level = Level.parse(cl.getOptionValue("L").toUpperCase());
+
             // Set log level on this class.
-            logger.config("setting log level to " + level);
-            logger.setLevel(level);
-            
+            LOGGER.config("setting log level to " + level);
+            LOGGER.setLevel(level);
+
             // Set log level on conditions manager.
             DatabaseConditionsManager.getInstance().setLogLevel(level);
         }
 
         // Add all extra arguments to the EVIO file list.
-        List<String> evioFileList = new ArrayList<String>(Arrays.asList(cl.getArgs()));
+        final List<String> evioFileList = new ArrayList<String>(Arrays.asList(cl.getArgs()));
 
         // Process text file containing list of EVIO file paths, one per line.
         if (cl.hasOption("f")) {
             // Add additional EVIO files to process from text file.
-            File file = new File(cl.getOptionValue("f"));
+            final File file = new File(cl.getOptionValue("f"));
             if (!file.exists()) {
                 throw new RuntimeException("The file " + file.getPath() + " does not exist.");
             }
-            Path filePath = file.toPath();
+            final Path filePath = file.toPath();
             List<String> lines = null;
             try {
                 lines = Files.readAllLines(filePath, Charset.defaultCharset());
-            } catch (IOException e) {
+            } catch (final IOException e) {
                 throw new RuntimeException(e);
             }
-            for (String line : lines) {
-                File evioFile = new File(line);
+            for (final String line : lines) {
+                final File evioFile = new File(line);
                 if (evioFile.exists()) {
                     evioFileList.add(evioFile.getPath());
                 } else {
@@ -194,8 +299,8 @@
         // Is the EVIO file list empty?
         if (evioFileList.isEmpty()) {
             // There weren't any EVIO files provided on the command line so exit.
-            logger.severe("No EVIO files were provided with command line arguments or -f option.");
-            printUsage();
+            LOGGER.severe("No EVIO files were provided with command line arguments or -f option.");
+            this.printUsage();
         }
 
         String lcioFileName = null;
@@ -204,26 +309,27 @@
 
         // Get the LCIO output file.
         if (cl.hasOption("l")) {
-            logger.config("set LCIO file to " + lcioFileName);
+            LOGGER.config("set LCIO file to " + lcioFileName);
             lcioFileName = cl.getOptionValue("l");
         }
 
         // Get the steering file or resource for the LCSim job.
         if (cl.hasOption("x")) {
-            String lcsimXmlName = cl.getOptionValue("x");
+            final String lcsimXmlName = cl.getOptionValue("x");
             if (cl.hasOption("r")) {
                 steeringStream = EvioToLcio.class.getResourceAsStream(lcsimXmlName);
                 if (steeringStream == null) {
-                    logger.severe("LCSim steering resource " + lcsimXmlName + " was not found.");
-                    throw new IllegalArgumentException("XML steering resource was not found.");
-                }
-                logger.config("using steering resource " + lcsimXmlName);
+                    IllegalArgumentException e = new IllegalArgumentException("XML steering resource was not found.");
+                    LOGGER.log(Level.SEVERE, "LCSim steering resource " + lcsimXmlName + " was not found.", e);
+                    throw e;
+                }
+                LOGGER.config("using steering resource " + lcsimXmlName);
             } else {
                 try {
                     steeringStream = new FileInputStream(lcsimXmlName);
-                    logger.config("using steering file " + lcsimXmlName);
-                } catch (FileNotFoundException e) {
-                    logger.severe("The XML steering file " + lcsimXmlName + " does not exist.");
+                    LOGGER.config("using steering file " + lcsimXmlName);
+                } catch (final FileNotFoundException e) {
+                    LOGGER.severe("The XML steering file " + lcsimXmlName + " does not exist.");
                     throw new IllegalArgumentException("Steering file does not exist.", e);
                 }
             }
@@ -232,7 +338,7 @@
         // Setup the default steering which just prints event numbers.
         if (steeringStream == null) {
             steeringStream = EvioToLcio.class.getResourceAsStream(DEFAULT_STEERING_RESOURCE);
-            logger.config("using default steering resource " + DEFAULT_STEERING_RESOURCE);
+            LOGGER.config("using default steering resource " + DEFAULT_STEERING_RESOURCE);
         }
 
         // Get the max number of events to process.
@@ -241,52 +347,53 @@
             if (maxEvents <= 0) {
                 throw new IllegalArgumentException("Value of -n option is invalid: " + maxEvents);
             }
-            logger.config("set max events to " + maxEvents);
+            LOGGER.config("set max events to " + maxEvents);
         }
 
         // Setup the LCIO writer.
         if (lcioFileName != null) {
             try {
-                writer = new LCIOWriter(new File(lcioFileName));
-                logger.config("initialized LCIO writer with file " + lcioFileName);
-            } catch (IOException e) {
-                logger.severe("Problem initializing the LCIO writer.");
+                writer = new LCIOWriter(lcioFileName);
+                LOGGER.config("initialized LCIO writer with file " + lcioFileName);
+            } catch (final IOException e) {
+                LOGGER.severe("Problem initializing the LCIO writer.");
                 throw new RuntimeException(e);
             }
         }
 
         // Process the LCSim job variable definitions, if any.
-        JobManager jobManager = new JobManager();
+        final JobManager jobManager = new JobManager();
         if (cl.hasOption("D")) {
-            String[] steeringOptions = cl.getOptionValues("D");
-            for (String def : steeringOptions) {
-                String[] s = def.split("=");
+            final String[] steeringOptions = cl.getOptionValues("D");
+            for (final String def : steeringOptions) {
+                final String[] s = def.split("=");
                 if (s.length != 2) {
-                    logger.severe("bad variable format: " + def);
-                    throw new IllegalArgumentException("Bad variable format: " + def);
-                }
-                String key = s[0];
-                String value = s[1];
+                    IllegalArgumentException e = new IllegalArgumentException("Bad variable format: " + def);
+                    LOGGER.log(Level.SEVERE, "bad variable format: " + def, e);
+                    throw e;
+                }
+                final String key = s[0];
+                final String value = s[1];
                 jobManager.addVariableDefinition(key, value);
-                logger.config("set steering variable: " + key + "=" + value);
+                LOGGER.config("set steering variable: " + key + "=" + value);
             }
         }
 
         // Enable headless mode so no plots are shown.
         if (cl.hasOption("b")) {
-            logger.config("Headless mode is enabled.  No plots will be shown.");
+            LOGGER.config("Headless mode is enabled.  No plots will be shown.");
             jobManager.enableHeadlessMode();
         }
 
         // Configure the LCSim job manager.
         jobManager.setup(steeringStream);
         jobManager.configure();
-        logger.config("LCSim job manager was successfully configured.");
+        LOGGER.config("LCSim job manager was successfully configured.");
 
         // Get the user specified detector name.
         if (cl.hasOption("d")) {
             detectorName = cl.getOptionValue("d");
-            logger.config("User set detector to " + detectorName + " with command option.");
+            LOGGER.config("User set detector to " + detectorName + " with command option.");
         } else {
             throw new RuntimeException("Missing -d argument with name of detector.");
         }
@@ -294,30 +401,30 @@
         // Get the user specified run number.
         if (cl.hasOption("R")) {
             runNumber = Integer.parseInt(cl.getOptionValue("R"));
-            logger.config("User set run number to " + runNumber + " with command option.");
-        }
-        
+            LOGGER.config("User set run number to " + runNumber + " with command option.");
+        }
+
         // Set the conditions system tag.
         if (cl.hasOption("t")) {
-            String tag = cl.getOptionValue("t");
+            final String tag = cl.getOptionValue("t");
             DatabaseConditionsManager.getInstance().setTag(tag);
         }
 
         // Is there a run number from the command line options?
         if (runNumber != null) {
             // Initialize the conditions system before the job starts and freeze it.
-            checkConditions(runNumber, true);
+            this.checkConditions(runNumber, true);
         }
 
         // Print out the EVIO file list before the job starts.
-        StringBuffer buff = new StringBuffer();
+        final StringBuffer buff = new StringBuffer();
         buff.append("The job will include the following EVIO files ...");
         buff.append('\n');
-        for (String evioFileName : evioFileList) {            
+        for (final String evioFileName : evioFileList) {
             buff.append(evioFileName);
             buff.append('\n');
         }
-        logger.config(buff.toString());
+        LOGGER.config(buff.toString());
 
         // Get whether to debug print XML from the EVIO events.
         boolean printXml = false;
@@ -332,19 +439,19 @@
 
         // Loop over the input EVIO files.
         EvioReader reader = null;
-        fileLoop: for (String evioFileName : evioFileList) {
+        fileLoop: for (final String evioFileName : evioFileList) {
 
             // Get the next EVIO input file.
-            File evioFile = new File(evioFileName);
+            final File evioFile = new File(evioFileName);
             if (!evioFile.exists()) {
                 throw new RuntimeException("EVIO file " + evioFile.getPath() + " does not exist.");
             }
-            logger.info("Opening EVIO file " + evioFileName + " ...");
+            LOGGER.info("Opening EVIO file " + evioFileName + " ...");
 
             // Open the EVIO reader.
             try {
-               reader = new EvioReader(evioFile,false,!cl.hasOption("M"));
-            } catch (Exception e) {
+                reader = new EvioReader(evioFile, false, !cl.hasOption("M"));
+            } catch (final Exception e) {
                 throw new RuntimeException("Error opening the EVIO file reader.", e);
             }
 
@@ -352,11 +459,11 @@
             long eventTime = 0; // in ms
 
             // Loop over events.
-            EvioEventQueue eventQueue = new EvioEventQueue(-1L, maxBufferSize);
+            final EvioEventQueue eventQueue = new EvioEventQueue(-1L, maxBufferSize);
             eventLoop: for (;;) {
 
                 // Buffer the EVIO events into the queue.
-                bufferEvents(reader, eventQueue, maxBufferSize);
+                this.bufferEvents(reader, eventQueue, maxBufferSize);
 
                 // Is the event queue empty?
                 if (eventQueue.size() == 0) {
@@ -371,70 +478,68 @@
                     EvioEvent evioEvent = null;
                     try {
                         eventQueue.next();
-                        evioEvent = (EvioEvent) eventQueue.getCurrentRecord();         
+                        evioEvent = (EvioEvent) eventQueue.getCurrentRecord();
                         // The parseEvent method does not need to be called here.
                         // The events were already parsed when buffering.
                         if (evioEvent == null) {
-                            new RuntimeException().printStackTrace();
+                            new RuntimeException("Failed to read EVIO event.").printStackTrace();
                             continue recordLoop;
                         }
-                    } catch (IOException e) {
-                        // This means the EVIO event has bad data.  
-                        logger.severe(e.getMessage());
-                        e.printStackTrace();
+                    } catch (final IOException e) {
+                        // This means the EVIO event has bad data.
+                        LOGGER.log(Level.SEVERE, e.getMessage(), e);
                         continue recordLoop;
-                    } catch (NoSuchRecordException e) {
+                    } catch (final NoSuchRecordException e) {
                         // This means the queue does not have any more events.
                         // We checked hasNext() already so it should not happen.
-                        logger.severe(e.getMessage());
-                        e.printStackTrace();
+                        LOGGER.log(Level.SEVERE, e.getMessage(), e);
                         break recordLoop;
                     }
-                    
+
                     // Print out event XML if enabled.
                     if (printXml) {
-                        logger.info(evioEvent.toXML());
+                        LOGGER.info(evioEvent.toXML());
                     }
 
                     // Is this a pre start event?
                     if (EvioEventUtilities.isPreStartEvent(evioEvent)) {
 
                         // Get the pre start event's data bank.
-                        int[] data = EvioEventUtilities.getControlEventData(evioEvent);
+                        final int[] data = EvioEventUtilities.getControlEventData(evioEvent);
 
                         if (data == null) {
                             // This should never happen but just ignore it.
-                            logger.severe("Pre start event is missing a data bank.");
+                            LOGGER.severe("Pre start event is missing a data bank.");
                         } else {
                             // Check if conditions system needs to be updated from the pre start data.
-                            checkConditions(data[1], false);                        
+                            this.checkConditions(data[1], false);
                         }
-                    } 
+                    }
 
                     // Is this an end event?
                     if (EvioEventUtilities.isEndEvent(evioEvent)) {
-                        int[] data = EvioEventUtilities.getControlEventData(evioEvent);
+                        final int[] data = EvioEventUtilities.getControlEventData(evioEvent);
                         if (data == null) {
                             // This should never happen but just ignore it.
-                            logger.severe("The end event is missing a data bank.");
+                            LOGGER.severe("The end event is missing a data bank.");
                         } else {
-                            int seconds = data[0];
-                            int totalEvents = data[2];
-                            logger.info("EVIO end event with " + totalEvents + " events and " + seconds + " seconds");
+                            final int seconds = data[0];
+                            final int totalEvents = data[2];
+                            LOGGER.info("EVIO end event with " + totalEvents + " events and " + seconds + " seconds");
                         }
-                    } 
+                    }
 
                     // Setup state in the LCSimEventBuilder based on the EVIO control event.
                     if (eventBuilder != null) {
                         eventBuilder.readEvioEvent(evioEvent);
-                    } 
+                    }
 
                     // Is this a physics event?
                     if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
 
                         // Print physics event number, which is actually a sequence number from
                         // the reader, not the actual event number from the data.
-                        logger.finest("physics event seq #" + evioEvent.getEventNumber());
+                        LOGGER.finest("physics event " + evioEvent.getEventNumber());
 
                         // Is the event builder initialized?
                         if (eventBuilder == null) {
@@ -442,64 +547,64 @@
                             throw new RuntimeException("The LCSimEventBuilder was never initialized.");
                         }
 
-                        // Build the LCIO event.                        
-                        EventHeader lcioEvent = eventBuilder.makeLCSimEvent(evioEvent);
-                        eventTime = (lcioEvent.getTimeStamp() / 1000000);                           
-                        logger.finest("created LCIO event #" + lcioEvent.getEventNumber() + " with time " + new Date(eventTime));
+                        // Build the LCIO event.
+                        final EventHeader lcioEvent = eventBuilder.makeLCSimEvent(evioEvent);
+                        eventTime = lcioEvent.getTimeStamp() / 1000000;
+                        LOGGER.finest("created LCIO event " + lcioEvent.getEventNumber() + " with time " + new Date(eventTime));
                         if (firstEvent) {
-                            logger.info("first physics event time: " + eventTime / 1000 + " - " + new Date(eventTime));
+                            LOGGER.info("first physics event time: " + eventTime / 1000 + " - " + new Date(eventTime));
                             firstEvent = false;
                         }
 
                         // Activate Driver process methods.
-                        logger.finest("jobManager processing event " + lcioEvent.getEventNumber());
+                        LOGGER.finest("jobManager processing event " + lcioEvent.getEventNumber());
                         jobManager.processEvent(lcioEvent);
 
                         // Write out this LCIO event.
                         if (writer != null) {
-                            try {
+                            try {                                
                                 writer.write(lcioEvent);
                                 writer.flush();
-                            } catch (IOException e) {
+                                LOGGER.finest("wrote LCSim event " + lcioEvent.getEventNumber());
+                            } catch (final IOException e) {
                                 throw new RuntimeException("Error writing LCIO file.", e);
                             }
-                            logger.finest("wrote event #" + lcioEvent.getEventNumber());
+                            LOGGER.finest("wrote event #" + lcioEvent.getEventNumber());
                         }
 
                         // Increment number of events processed.
-                        nEvents++;                        
+                        nEvents++;
 
                         // Check if max events was reached and end job if this is true.
                         if (maxEvents != -1 && nEvents >= maxEvents) {
-                            logger.info("maxEvents " + maxEvents + " was reached");
+                            LOGGER.info("maxEvents " + maxEvents + " was reached");
                             break fileLoop;
                         }
                     }
                 }
             } // eventLoop
-            logger.info("Last physics event time: " + eventTime / 1000 + " - " + new Date(eventTime));
+            LOGGER.info("Last physics event time: " + eventTime / 1000 + " - " + new Date(eventTime));
 
             // Close the EVIO reader.
             try {
                 reader.close();
-                logger.fine("EVIO reader closed.");
-            } catch (IOException e) {
-                logger.warning(e.getMessage());
+                LOGGER.fine("EVIO reader closed.");
+            } catch (final IOException e) {
+                LOGGER.warning(e.getMessage());
                 e.printStackTrace();
             }
         } // fileLoop
-        
+
         // If the processing stopped because of max events then need to cleanup the reader.
         if (reader != null) {
             if (!reader.isClosed()) {
                 // Close the EVIO reader.
                 try {
                     reader.close();
-                    logger.fine("EVIO reader closed.");
-                } catch (IOException e) {
-                    logger.warning(e.getMessage());
-                    e.printStackTrace();
-                }   
+                    LOGGER.fine("EVIO reader closed.");
+                } catch (final IOException e) {
+                    LOGGER.log(Level.WARNING, e.getMessage(), e);
+                }
             }
         }
 
@@ -510,134 +615,35 @@
         if (writer != null) {
             try {
                 writer.close();
-                logger.info("LCIO output writer closed okay.");
-            } catch (IOException e) {
+                LOGGER.info("LCIO output writer closed okay.");
+            } catch (final IOException e) {
                 e.printStackTrace();
-                logger.warning(e.getMessage());
-            }
-        }
-
-        logger.info("Job finished successfully!");
+                LOGGER.warning(e.getMessage());
+            }
+        }
+
+        LOGGER.info("Job finished successfully!");
     }
 
     /**
-     * Buffer up to <code>maxBufferSize</code> events in the <code>eventQueue</code>.
-     * This method will also initialize the conditions system using a run number
-     * if a header bank is found.
-     * @param reader The EVIO reader.
-     * @param eventQueue The event queue.
-     * @param maxBufferSize The maximum number of records to buffer.
-     */
-    private void bufferEvents(EvioReader reader, EvioEventQueue eventQueue, int maxBufferSize) {
-        EvioEvent evioEvent = null;
-        while (eventQueue.size() < maxBufferSize) {
-            try {
-                // Read the next event.
-                evioEvent = reader.nextEvent();
-
-                if (evioEvent == null) { // This catches an end of file or bad event.
-                    break;
-                }
-
-                // Add the event to the queue.
-                eventQueue.addRecord(evioEvent); 
-
-            } catch (IOException | EvioException e) {
-                logger.severe(e.getMessage());
-                e.printStackTrace();
-            }
-
-            if (evioEvent != null) {
-                
-                // Parse the event.
-                try {
-                    reader.parseEvent(evioEvent);
-                } catch (EvioException e) {
-                    logger.severe(e.getMessage());
-                    e.printStackTrace();
-                    continue;
-                }
-
-                // Is conditions system not frozen?
-                if (!DatabaseConditionsManager.getInstance().isFrozen()) {
-                
-                    // Get head bank from event.
-                    BaseStructure headBank = EvioEventUtilities.getHeadBank(evioEvent);
-                
-                    // Is head bank available in this event?
-                    if (headBank != null) { 
-                                        
-                        // Get the run number from the head bank.
-                        runNumber = headBank.getIntData()[1];                    
-                        logger.finer("got head bank with run number " + runNumber);
-
-                        // Check if the conditions system needs to be updated from the head bank.
-                        checkConditions(runNumber, false);                    
-                    } else {
-                        logger.finest("event " + evioEvent.getEventNumber() + " does not have a head bank");
-                    }
-                }
-            } 
-        }
-        logger.finer("buffered " + eventQueue.size() + " events");
-    }
-
-    /**
-     * Print the CLI usage and exit.
-     */
-    private void printUsage() {
-        System.out.println("EvioToLcio [options] [evioFiles]");
-        HelpFormatter help = new HelpFormatter();
-        help.printHelp(" ", options);
-        System.exit(1);
-    }
-
-    /**
      * Setup the LCSimEventBuilder based on the current detector name and run number.
+     *
      * @param detectorName The detector name to be assigned to the event builder.
      * @param runNumber The run number which determines which event builder to use.
      * @return The LCSimEventBuilder for the Test Run or Engineering Run.
      */
-    private void setupEventBuilder(int runNumber) {
+    private void setupEventBuilder(final int runNumber) {
         // Is this run number from the Test Run?
         if (DatabaseConditionsManager.isTestRun(runNumber)) {
             // Configure conditions system for Test Run.
-            logger.info("using Test Run event builder");
+            LOGGER.info("using Test Run event builder");
             eventBuilder = new LCSimTestRunEventBuilder();
         } else {
             // Configure conditions system for Eng Run or default.
-            logger.info("using Eng Run event builder");
+            LOGGER.info("using Eng Run event builder");
             eventBuilder = new LCSimEngRunEventBuilder();
         }
-        ConditionsManager conditions = ConditionsManager.defaultInstance();
-        conditions.addConditionsListener(eventBuilder);        
-    }
-    
-    /**
-     * Check if the conditions system and event builder need to be initialized 
-     * or updated given a run number.
-     * @param runNumber The run number.
-     * @param freeze True to freeze conditions system after it is setup.
-     */
-    private void checkConditions(int runNumber, boolean freeze) {
-                        
-        // Is the event builder uninitialized?
-        if (eventBuilder == null) {
-            // Setup event builder.
-            setupEventBuilder(runNumber);
-        }
-                
-        // Update the conditions system with the new run number.       
-        try {
-            // This call may be ignored by the conditions system if the run number is not new.
-            ConditionsManager.defaultInstance().setDetector(detectorName, runNumber);
-        } catch (ConditionsNotFoundException e) {
-            throw new RuntimeException("Error initializing conditions system.", e);
-        }     
-        
-        if (freeze) {
-            // Freeze the conditions system so subsequent run numbers are ignored.
-            DatabaseConditionsManager.getInstance().freeze();
-        }
+        final ConditionsManager conditions = ConditionsManager.defaultInstance();
+        conditions.addConditionsListener(eventBuilder);
     }
 }