LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  May 2015

HPS-SVN May 2015

Subject:

r3060 - /java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 29 May 2015 21:13:45 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (870 lines)

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

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use