Author: [log in to unmask]
Date: Mon Nov 10 00:03:27 2014
New Revision: 1464
Log:
Copy TestRunEvioToLcio to EvioToLcio and deprecate it. (Old class not removed for now.)
Added:
java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java
Modified:
java/trunk/evio/src/main/java/org/hps/evio/TestRunEvioToLcio.java
Added: java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java (added)
+++ java/trunk/evio/src/main/java/org/hps/evio/EvioToLcio.java Mon Nov 10 00:03:27 2014
@@ -0,0 +1,325 @@
+package org.hps.evio;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.hps.conditions.DatabaseConditionsManager;
+import org.jlab.coda.jevio.EvioEvent;
+import org.jlab.coda.jevio.EvioReader;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
+import org.lcsim.event.EventHeader;
+import org.lcsim.job.JobControlManager;
+import org.lcsim.lcio.LCIOWriter;
+
+/**
+ * This class is for converting Test Run EVIO to LCIO events and performing an
+ * LCSim job in the same session. The processed events are then written to disk
+ * using an LCIOWriter.
+ *
+ * To run this class from command line:
+ *
+ * TestRunEvioToLcio [evioFile] -l [lcioFile] -d [detectorName] -x
+ * [lcsimXmlFile]
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class EvioToLcio {
+
+ private static final String defaultDetectorName = "";
+ private static final String defaultSteeringFile = "/org/hps/steering/monitoring/DummyMonitoring.lcsim";
+
+ /**
+ * Defines command line options for this program.
+ *
+ * @return The command line options.
+ */
+ private static Options createCommandLineOptions() {
+ Options options = new Options();
+ options.addOption(new Option("l", true, "The name of the output LCIO file"));
+ options.addOption(new Option("d", true, "The name of the detector to use for LCSim conditions"));
+ options.addOption(new Option("x", true, "The LCSim XML file to process the LCIO events"));
+ options.addOption(new Option("s", true, "Sleep duration between events (in ms)"));
+ options.addOption(new Option("n", true, "Stop after N events"));
+ options.addOption(new Option("w", false, "Wait after end of data"));
+ options.addOption(new Option("D", true, "Pass a variable to the steering file"));
+ options.addOption(new Option("r", false, "Interpret -x argument as a steering resource instead of a file path"));
+ options.addOption(new Option("R", true, "The run number"));
+ options.addOption(new Option("t", false, "Read test run data"));
+ return options;
+ }
+
+ /**
+ * This method will execute the EVIO to LCIO conversion and perform an
+ * intermediate LCSim job. Then the resultant LCIO events will be written to
+ * disk.
+ * @param args The command line arguments.
+ */
+ public static void main(String[] args) {
+ int maxEvents = 0;
+ int nEvents = 0;
+
+ // Set up command line parsing.
+ Options options = createCommandLineOptions();
+ if (args.length == 0) {
+ System.out.println("TestRunEvioToLcio [options] [evioFiles]");
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+ CommandLineParser parser = new PosixParser();
+
+ // Parse command line arguments.
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.", e);
+ }
+
+ String lcioFileName = null;
+ LCIOWriter writer = null;
+ String detectorName = defaultDetectorName;
+ InputStream steeringStream = null;
+ int sleepTime = -1;
+
+ // LCIO output file.
+ if (cl.hasOption("l")) {
+ lcioFileName = cl.getOptionValue("l");
+ }
+
+ // Name of detector.
+ if (cl.hasOption("d")) {
+ detectorName = cl.getOptionValue("d");
+ }
+
+ if ("".equals(detectorName)) {
+ throw new RuntimeException("You need to specify a valid detector name as input, use the -d option");
+ }
+
+ // LCSim XML file to execute inline.
+ if (cl.hasOption("x")) {
+ String lcsimXmlName = cl.getOptionValue("x");
+ if (cl.hasOption("r")) {
+ steeringStream = TestRunEvioToLcio.class.getResourceAsStream(lcsimXmlName);
+ if (steeringStream == null) {
+ throw new RuntimeException("resource " + lcsimXmlName + " not found");
+ }
+ } else {
+ try {
+ steeringStream = new FileInputStream(lcsimXmlName);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ if (steeringStream == null) {
+ steeringStream = TestRunEvioToLcio.class.getResourceAsStream(defaultSteeringFile);
+ }
+
+ // Sleep time.
+ if (cl.hasOption("s")) {
+ sleepTime = Integer.valueOf(cl.getOptionValue("s"));
+ }
+
+ // Sleep time.
+ if (cl.hasOption("n")) {
+ maxEvents = Integer.valueOf(cl.getOptionValue("n"));
+ }
+
+ // LCIO writer.
+ if (lcioFileName != null) {
+ try {
+ writer = new LCIOWriter(new File(lcioFileName));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // LCSim job manager.
+ JobControlManager jobManager = new JobControlManager();
+
+ if (cl.hasOption("D")) {
+ String[] steeringOptions = cl.getOptionValues("D");
+ for (String def : steeringOptions) {
+ String[] s = def.split("=");
+ if (s.length != 2) {
+ throw new RuntimeException("Bad variable format: " + def);
+ }
+ String key = s[0];
+ String value = s[1];
+ jobManager.addVariableDefinition(key, value);
+ }
+ }
+
+ int runNumber = 0;
+ if (cl.hasOption("R")) {
+ runNumber = Integer.valueOf(cl.getOptionValue("R"));
+ }
+
+ jobManager.setup(steeringStream);
+ jobManager.configure();
+
+ // LCSim event builder.
+ LCSimEventBuilder eventBuilder = null;
+
+ DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
+
+ if (cl.hasOption("t")) {
+ manager.configure("/org/hps/conditions/config/conditions_database_testrun_2012.xml");
+ eventBuilder = new LCSimTestRunEventBuilder();
+ } else {
+ eventBuilder = new LCSimEngRunEventBuilder();
+ }
+
+ try {
+ manager.setDetector(detectorName, runNumber);
+ } catch (ConditionsNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ eventBuilder.setDetectorName(detectorName);
+ ConditionsManager.defaultInstance().addConditionsListener(eventBuilder);
+
+ for (String evioFileName : cl.getArgs()) {
+ // EVIO input file.
+ File evioFile = new File(evioFileName);
+ System.out.println("Opening file " + evioFileName);
+ // EVIO reader.
+ EvioReader reader = null;
+ try {
+ reader = new EvioReader(evioFile);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ boolean firstEvent = true;
+ long time = 0; // in ms
+
+ // Loop over EVIO events, build LCSim events, process them, and then
+ // write events to disk.
+ fileLoop: while (maxEvents == 0 || nEvents < maxEvents) {
+ EvioEvent evioEvent = null;
+ try {
+ eventLoop: while (evioEvent == null) {
+ evioEvent = reader.nextEvent();
+ if (evioEvent == null) {
+ break fileLoop;
+ }
+ try {
+ reader.parseEvent(evioEvent);
+ } catch (Exception e) {
+ Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error reading EVIO event", e);
+ continue eventLoop;
+ }
+ }
+ // let event builder check for run information
+ eventBuilder.readEvioEvent(evioEvent);
+ // Handlers for different event types.
+ if (EventConstants.isPreStartEvent(evioEvent)) {
+ int[] data = evioEvent.getIntData();
+ //int seconds = data[0];
+ runNumber = data[1];
+ // calibListener.prestart(seconds, runNumber);
+ } else if (EventConstants.isEndEvent(evioEvent)) {
+ int[] data = evioEvent.getIntData();
+ //int seconds = data[0];
+ //int nevents = data[2];
+ // calibListener.endRun(seconds, nevents);
+ } else if (eventBuilder.isPhysicsEvent(evioEvent)) {
+ EventHeader lcioEvent = eventBuilder.makeLCSimEvent(evioEvent);
+
+ time = (lcioEvent.getTimeStamp() / 1000000);
+
+ if (firstEvent) {
+ System.out.println("First physics event time: " + time / 1000 + " - " + new Date(time));
+ firstEvent = false;
+ }
+ // if
+ // (lcioEvent.hasCollection(BaseRawCalorimeterHit.class,
+ // "EcalReadoutHits") &&
+ // !lcioEvent.get(BaseRawCalorimeterHit.class,
+ // "EcalReadoutHits").isEmpty()) {
+ // continue;
+ // }
+ // if (lcioEvent.hasCollection(TriggerData.class,
+ // "TriggerBank")) {
+ // List<TriggerData> triggerList =
+ // lcioEvent.get(TriggerData.class, "TriggerBank");
+ // if (!triggerList.isEmpty()) {
+ // TriggerData triggerData = triggerList.get(0);
+ //
+ // int orTrig = triggerData.getOrTrig();
+ // int topTrig = triggerData.getTopTrig();
+ // int botTrig = triggerData.getBotTrig();
+ // int pairTrig = triggerData.getPairTrig();
+ // if (topTrig != 0 && botTrig != 0) {
+ // System.out.format("%x\t%x\t%x\t%x\n", orTrig,
+ // topTrig, botTrig, pairTrig);
+ // } else {
+ // continue;
+ // }
+ // }
+ // }
+ jobManager.processEvent(lcioEvent);
+ if (writer != null) {
+ writer.write(lcioEvent);
+ writer.flush();
+ }
+
+ }
+ } catch (Exception e) {
+ // Catch all event processing errors and continue.
+ Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error in event processing", e);
+ continue;
+ } finally {
+ if (sleepTime > 0) {
+ try {
+ Thread.sleep(sleepTime);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ nEvents++;
+ }
+ System.out.println("Last physics event time: " + time / 1000 + " - " + new Date(time));
+ try {
+ reader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ System.out.println("No more data");
+
+ if (!cl.hasOption("w")) {
+ System.out.println("Exiting");
+ jobManager.finish();
+ System.out.println("jobManager finished");
+ }
+
+ if (writer != null) {
+ System.out.println("close writer");
+ try {
+ writer.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println("closed writer");
+ }
+ }
+}
Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunEvioToLcio.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/TestRunEvioToLcio.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/TestRunEvioToLcio.java Mon Nov 10 00:03:27 2014
@@ -8,6 +8,7 @@
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
@@ -15,10 +16,11 @@
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
-import org.hps.util.RunControlDialog;
+import org.hps.conditions.DatabaseConditionsManager;
import org.jlab.coda.jevio.EvioEvent;
import org.jlab.coda.jevio.EvioReader;
import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
import org.lcsim.event.EventHeader;
import org.lcsim.job.JobControlManager;
import org.lcsim.lcio.LCIOWriter;
@@ -34,297 +36,293 @@
* [lcsimXmlFile]
*
* @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @deprecated use {@link EvioToLcio instead}
*/
-// TODO: Update this class so it works correctly with the database conditions system
-// FIXME: For now, the run number was added to the command line options so the
-// correct set of conditions can be loaded. This needs to be changed to
-// get the correct run number from the prestart.
+@Deprecated
public class TestRunEvioToLcio {
- private static final String defaultDetectorName = "";
- private static final String defaultSteeringFile = "/org/hps/steering/monitoring/DummyMonitoring.lcsim";
-
- /**
- * Defines command line options for this program.
- *
- * @return The command line options.
- */
- private static Options createCommandLineOptions() {
- Options options = new Options();
-
- options.addOption(new Option("l", true, "The name of the output LCIO file."));
- options.addOption(new Option("d", true, "The name of the detector to use for LCSim conditions."));
- options.addOption(new Option("x", true, "The LCSim XML file to process the LCIO events."));
- options.addOption(new Option("s", true, "Sleep duration between events (in ms)"));
- options.addOption(new Option("n", true, "Stop after N events"));
- options.addOption(new Option("w", false, "Wait after end of data"));
- options.addOption(new Option("c", false, "Show run control window"));
- options.addOption(new Option("D", true, "Pass a variable to the steering file"));
- options.addOption(new Option("r", false, "Interpret -x argument as a steering resource instead of a file path"));
- options.addOption(new Option("R", true, "The run number"));
- options.addOption(new Option("t", false, "Read test run data"));
-
- return options;
- }
-
- /**
- * This method will execute the EVIO to LCIO conversion and perform an
- * intermediate LCSim job. Then the resultant LCIO events will be written to
- * disk.
- *
- * @param args The command line arguments.
- */
- public static void main(String[] args) {
- int maxEvents = 0;
- int nEvents = 0;
-
- // Set up command line parsing.
- Options options = createCommandLineOptions();
- if (args.length == 0) {
- System.out.println("TestRunEvioToLcio [options] [evioFiles]");
- HelpFormatter help = new HelpFormatter();
- help.printHelp(" ", options);
- System.exit(1);
- }
- CommandLineParser parser = new PosixParser();
-
- // Parse command line arguments.
- CommandLine cl = null;
- try {
- cl = parser.parse(options, args);
- } catch (ParseException e) {
- throw new RuntimeException("Problem parsing command line options.", e);
- }
-
- String lcioFileName = null;
- LCIOWriter writer = null;
- String detectorName = defaultDetectorName;
- InputStream steeringStream = null;
- int sleepTime = -1;
-
- // Remind people not to use -e any more
- //if (cl.hasOption("e")) {
- // System.out.println("Option -e is deprecated; EVIO file name is now a non-option argument");
- //}
- // LCIO output file.
- if (cl.hasOption("l")) {
- lcioFileName = cl.getOptionValue("l");
- }
-
- // Name of detector.
- if (cl.hasOption("d")) {
- detectorName = cl.getOptionValue("d");
- }
-
- if ("".equals(detectorName)) {
- throw new RuntimeException("You need to specify a valid detector name as input, use the -d option");
- }
-
- // LCSim XML file to execute inline.
- if (cl.hasOption("x")) {
- String lcsimXmlName = cl.getOptionValue("x");
- if (cl.hasOption("r")) {
- steeringStream = TestRunEvioToLcio.class.getResourceAsStream(lcsimXmlName);
- if (steeringStream == null) {
- throw new RuntimeException("resource " + lcsimXmlName + " not found");
- }
- } else {
- try {
- steeringStream = new FileInputStream(lcsimXmlName);
- } catch (FileNotFoundException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
- if (steeringStream == null) {
- steeringStream = TestRunEvioToLcio.class.getResourceAsStream(defaultSteeringFile);
- }
-
- // Sleep time.
- if (cl.hasOption("s")) {
- sleepTime = Integer.valueOf(cl.getOptionValue("s"));
- }
-
- // Sleep time.
- if (cl.hasOption("n")) {
- maxEvents = Integer.valueOf(cl.getOptionValue("n"));
- }
-
- RunControlDialog runControl = null;
-
- if (cl.hasOption("c")) {
- runControl = new RunControlDialog();
- }
-
- // LCIO writer.
- if (lcioFileName != null) {
- try {
- writer = new LCIOWriter(new File(lcioFileName));
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- // LCSim job manager.
- JobControlManager jobManager = new JobControlManager();
-
- if (cl.hasOption("D")) {
- String[] steeringOptions = cl.getOptionValues("D");
- for (String def : steeringOptions) {
- String[] s = def.split("=");
- if (s.length != 2) {
- throw new RuntimeException("Bad variable format: " + def);
- }
- String key = s[0];
- String value = s[1];
- jobManager.addVariableDefinition(key, value);
- }
- }
-
- int runNumber = 0;
- if (cl.hasOption("R")) {
- runNumber = Integer.valueOf(cl.getOptionValue("R"));
- }
-
- jobManager.setup(steeringStream);
- jobManager.configure();
-
- // LCSim event builder.
- LCSimEventBuilder eventBuilder = null;
-
- if (cl.hasOption("t")) {
- new org.hps.conditions.config.TestRunReadOnlyConfiguration(false).setup().load(detectorName, runNumber);
- eventBuilder = new LCSimTestRunEventBuilder();
- } else {
- new org.hps.conditions.config.DevReadOnlyConfiguration().setup().load(detectorName, runNumber);
- eventBuilder = new LCSimEngRunEventBuilder();
-
- }
-
- eventBuilder.setDetectorName(detectorName);
- ConditionsManager.defaultInstance().addConditionsListener(eventBuilder);
-
- for (String evioFileName : cl.getArgs()) {
- // EVIO input file.
- File evioFile = new File(evioFileName);
- System.out.println("Opening file " + evioFileName);
- // EVIO reader.
- EvioReader reader = null;
- try {
- reader = new EvioReader(evioFile);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- boolean firstEvent = true;
- long time = 0; //in ms
-
- // Loop over EVIO events, build LCSim events, process them, and then
- // write events to disk.
- fileLoop:
- while (maxEvents == 0 || nEvents < maxEvents) {
- EvioEvent evioEvent = null;
- try {
- eventLoop:
- while (evioEvent == null) {
- evioEvent = reader.nextEvent();
- if (evioEvent == null) {
- break fileLoop;
- }
- try {
- reader.parseEvent(evioEvent);
- } catch (Exception e) {
- Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error reading EVIO event", e);
- continue eventLoop;
- }
- }
- //let event builder check for run information
- eventBuilder.readEvioEvent(evioEvent);
- // Handlers for different event types.
- if (EventConstants.isPreStartEvent(evioEvent)) {
- int[] data = evioEvent.getIntData();
- int seconds = data[0];
- runNumber = data[1];
-// calibListener.prestart(seconds, runNumber);
- } else if (EventConstants.isEndEvent(evioEvent)) {
- int[] data = evioEvent.getIntData();
- int seconds = data[0];
- int nevents = data[2];
-// calibListener.endRun(seconds, nevents);
- } else if (eventBuilder.isPhysicsEvent(evioEvent)) {
- EventHeader lcioEvent = eventBuilder.makeLCSimEvent(evioEvent);
- if (runControl == null || runControl.process(lcioEvent)) {
- time = (lcioEvent.getTimeStamp() / 1000000);
-
- if (firstEvent) {
- System.out.println("First physics event time: " + time / 1000 + " - " + new Date(time));
- firstEvent = false;
- }
-// if (lcioEvent.hasCollection(BaseRawCalorimeterHit.class, "EcalReadoutHits") && !lcioEvent.get(BaseRawCalorimeterHit.class, "EcalReadoutHits").isEmpty()) {
-// continue;
-// }
-// if (lcioEvent.hasCollection(TriggerData.class, "TriggerBank")) {
-// List<TriggerData> triggerList = lcioEvent.get(TriggerData.class, "TriggerBank");
-// if (!triggerList.isEmpty()) {
-// TriggerData triggerData = triggerList.get(0);
-//
-// int orTrig = triggerData.getOrTrig();
-// int topTrig = triggerData.getTopTrig();
-// int botTrig = triggerData.getBotTrig();
-// int pairTrig = triggerData.getPairTrig();
-// if (topTrig != 0 && botTrig != 0) {
-// System.out.format("%x\t%x\t%x\t%x\n", orTrig, topTrig, botTrig, pairTrig);
-// } else {
-// continue;
-// }
-// }
-// }
- jobManager.processEvent(lcioEvent);
- if (writer != null) {
- writer.write(lcioEvent);
- writer.flush();
- }
- }
- }
- } catch (Exception e) {
- // Catch all event processing errors and continue.
- Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error in event processing", e);
- continue;
- } finally {
- if (sleepTime > 0) {
- try {
- Thread.sleep(sleepTime);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- nEvents++;
- }
- System.out.println("Last physics event time: " + time / 1000 + " - " + new Date(time));
- try {
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- System.out.println("No more data");
-
- if (!cl.hasOption("w")) {
- System.out.println("Exiting");
- jobManager.finish();
- System.out.println("jobManager finished");
- }
-
- if (writer != null) {
- System.out.println("close writer");
- try {
- writer.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- System.out.println("closed writer");
- }
- }
+ private static final String defaultDetectorName = "";
+ private static final String defaultSteeringFile = "/org/hps/steering/monitoring/DummyMonitoring.lcsim";
+
+ /**
+ * Defines command line options for this program.
+ *
+ * @return The command line options.
+ */
+ private static Options createCommandLineOptions() {
+ Options options = new Options();
+ options.addOption(new Option("l", true, "The name of the output LCIO file"));
+ options.addOption(new Option("d", true, "The name of the detector to use for LCSim conditions"));
+ options.addOption(new Option("x", true, "The LCSim XML file to process the LCIO events"));
+ options.addOption(new Option("s", true, "Sleep duration between events (in ms)"));
+ options.addOption(new Option("n", true, "Stop after N events"));
+ options.addOption(new Option("w", false, "Wait after end of data"));
+ options.addOption(new Option("D", true, "Pass a variable to the steering file"));
+ options.addOption(new Option("r", false, "Interpret -x argument as a steering resource instead of a file path"));
+ options.addOption(new Option("R", true, "The run number"));
+ options.addOption(new Option("t", false, "Read test run data"));
+ return options;
+ }
+
+ /**
+ * This method will execute the EVIO to LCIO conversion and perform an
+ * intermediate LCSim job. Then the resultant LCIO events will be written to
+ * disk.
+ * @param args The command line arguments.
+ */
+ public static void main(String[] args) {
+ int maxEvents = 0;
+ int nEvents = 0;
+
+ // Set up command line parsing.
+ Options options = createCommandLineOptions();
+ if (args.length == 0) {
+ System.out.println("TestRunEvioToLcio [options] [evioFiles]");
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+ CommandLineParser parser = new PosixParser();
+
+ // Parse command line arguments.
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.", e);
+ }
+
+ String lcioFileName = null;
+ LCIOWriter writer = null;
+ String detectorName = defaultDetectorName;
+ InputStream steeringStream = null;
+ int sleepTime = -1;
+
+ // LCIO output file.
+ if (cl.hasOption("l")) {
+ lcioFileName = cl.getOptionValue("l");
+ }
+
+ // Name of detector.
+ if (cl.hasOption("d")) {
+ detectorName = cl.getOptionValue("d");
+ }
+
+ if ("".equals(detectorName)) {
+ throw new RuntimeException("You need to specify a valid detector name as input, use the -d option");
+ }
+
+ // LCSim XML file to execute inline.
+ if (cl.hasOption("x")) {
+ String lcsimXmlName = cl.getOptionValue("x");
+ if (cl.hasOption("r")) {
+ steeringStream = TestRunEvioToLcio.class.getResourceAsStream(lcsimXmlName);
+ if (steeringStream == null) {
+ throw new RuntimeException("resource " + lcsimXmlName + " not found");
+ }
+ } else {
+ try {
+ steeringStream = new FileInputStream(lcsimXmlName);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ if (steeringStream == null) {
+ steeringStream = TestRunEvioToLcio.class.getResourceAsStream(defaultSteeringFile);
+ }
+
+ // Sleep time.
+ if (cl.hasOption("s")) {
+ sleepTime = Integer.valueOf(cl.getOptionValue("s"));
+ }
+
+ // Sleep time.
+ if (cl.hasOption("n")) {
+ maxEvents = Integer.valueOf(cl.getOptionValue("n"));
+ }
+
+ // LCIO writer.
+ if (lcioFileName != null) {
+ try {
+ writer = new LCIOWriter(new File(lcioFileName));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ // LCSim job manager.
+ JobControlManager jobManager = new JobControlManager();
+
+ if (cl.hasOption("D")) {
+ String[] steeringOptions = cl.getOptionValues("D");
+ for (String def : steeringOptions) {
+ String[] s = def.split("=");
+ if (s.length != 2) {
+ throw new RuntimeException("Bad variable format: " + def);
+ }
+ String key = s[0];
+ String value = s[1];
+ jobManager.addVariableDefinition(key, value);
+ }
+ }
+
+ int runNumber = 0;
+ if (cl.hasOption("R")) {
+ runNumber = Integer.valueOf(cl.getOptionValue("R"));
+ }
+
+ jobManager.setup(steeringStream);
+ jobManager.configure();
+
+ // LCSim event builder.
+ LCSimEventBuilder eventBuilder = null;
+
+ DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
+
+ if (cl.hasOption("t")) {
+ manager.configure("/org/hps/conditions/config/conditions_database_testrun_2012.xml");
+ eventBuilder = new LCSimTestRunEventBuilder();
+ } else {
+ eventBuilder = new LCSimEngRunEventBuilder();
+ }
+
+ try {
+ manager.setDetector(detectorName, runNumber);
+ } catch (ConditionsNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ eventBuilder.setDetectorName(detectorName);
+ ConditionsManager.defaultInstance().addConditionsListener(eventBuilder);
+
+ for (String evioFileName : cl.getArgs()) {
+ // EVIO input file.
+ File evioFile = new File(evioFileName);
+ System.out.println("Opening file " + evioFileName);
+ // EVIO reader.
+ EvioReader reader = null;
+ try {
+ reader = new EvioReader(evioFile);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ boolean firstEvent = true;
+ long time = 0; // in ms
+
+ // Loop over EVIO events, build LCSim events, process them, and then
+ // write events to disk.
+ fileLoop: while (maxEvents == 0 || nEvents < maxEvents) {
+ EvioEvent evioEvent = null;
+ try {
+ eventLoop: while (evioEvent == null) {
+ evioEvent = reader.nextEvent();
+ if (evioEvent == null) {
+ break fileLoop;
+ }
+ try {
+ reader.parseEvent(evioEvent);
+ } catch (Exception e) {
+ Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error reading EVIO event", e);
+ continue eventLoop;
+ }
+ }
+ // let event builder check for run information
+ eventBuilder.readEvioEvent(evioEvent);
+ // Handlers for different event types.
+ if (EventConstants.isPreStartEvent(evioEvent)) {
+ int[] data = evioEvent.getIntData();
+ //int seconds = data[0];
+ runNumber = data[1];
+ // calibListener.prestart(seconds, runNumber);
+ } else if (EventConstants.isEndEvent(evioEvent)) {
+ int[] data = evioEvent.getIntData();
+ //int seconds = data[0];
+ //int nevents = data[2];
+ // calibListener.endRun(seconds, nevents);
+ } else if (eventBuilder.isPhysicsEvent(evioEvent)) {
+ EventHeader lcioEvent = eventBuilder.makeLCSimEvent(evioEvent);
+
+ time = (lcioEvent.getTimeStamp() / 1000000);
+
+ if (firstEvent) {
+ System.out.println("First physics event time: " + time / 1000 + " - " + new Date(time));
+ firstEvent = false;
+ }
+ // if
+ // (lcioEvent.hasCollection(BaseRawCalorimeterHit.class,
+ // "EcalReadoutHits") &&
+ // !lcioEvent.get(BaseRawCalorimeterHit.class,
+ // "EcalReadoutHits").isEmpty()) {
+ // continue;
+ // }
+ // if (lcioEvent.hasCollection(TriggerData.class,
+ // "TriggerBank")) {
+ // List<TriggerData> triggerList =
+ // lcioEvent.get(TriggerData.class, "TriggerBank");
+ // if (!triggerList.isEmpty()) {
+ // TriggerData triggerData = triggerList.get(0);
+ //
+ // int orTrig = triggerData.getOrTrig();
+ // int topTrig = triggerData.getTopTrig();
+ // int botTrig = triggerData.getBotTrig();
+ // int pairTrig = triggerData.getPairTrig();
+ // if (topTrig != 0 && botTrig != 0) {
+ // System.out.format("%x\t%x\t%x\t%x\n", orTrig,
+ // topTrig, botTrig, pairTrig);
+ // } else {
+ // continue;
+ // }
+ // }
+ // }
+ jobManager.processEvent(lcioEvent);
+ if (writer != null) {
+ writer.write(lcioEvent);
+ writer.flush();
+ }
+
+ }
+ } catch (Exception e) {
+ // Catch all event processing errors and continue.
+ Logger.getLogger(TestRunEvioToLcio.class.getName()).log(Level.SEVERE, "Error in event processing", e);
+ continue;
+ } finally {
+ if (sleepTime > 0) {
+ try {
+ Thread.sleep(sleepTime);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ nEvents++;
+ }
+ System.out.println("Last physics event time: " + time / 1000 + " - " + new Date(time));
+ try {
+ reader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ System.out.println("No more data");
+
+ if (!cl.hasOption("w")) {
+ System.out.println("Exiting");
+ jobManager.finish();
+ System.out.println("jobManager finished");
+ }
+
+ if (writer != null) {
+ System.out.println("close writer");
+ try {
+ writer.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println("closed writer");
+ }
+ }
}
|