Author: [log in to unmask]
Date: Mon May 16 14:32:06 2016
New Revision: 4355
Log:
[HPSJAVA-670] Implement command line tool that allows setting of run number for conditions initialization.
Added:
java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/DetectorConverter.java
Added: java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/DetectorConverter.java
=============================================================================
--- java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/DetectorConverter.java (added)
+++ java/branches/HPSJAVA-409/detector-model/src/main/java/org/hps/detector/DetectorConverter.java Mon May 16 14:32:06 2016
@@ -0,0 +1,122 @@
+package org.hps.detector;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.imageio.spi.ServiceRegistry;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.lcsim.conditions.ConditionsManagerImplementation;
+import org.lcsim.conditions.ConditionsReader;
+import org.lcsim.geometry.compact.converter.Converter;
+import org.lcsim.util.loop.DummyConditionsConverter;
+import org.lcsim.util.loop.DummyDetector;
+
+/**
+ * A rewrite of the LCSim detector converter that supports setting of the run number
+ * for conditions system initialization so that database conditions are available.
+ *
+ * @author jeremym
+ */
+public class DetectorConverter {
+
+ private static Options OPTIONS = new Options();
+ static {
+ OPTIONS.addOption(new Option("i", "input-file", true, "input compact.xml file"));
+ OPTIONS.getOption("i").setRequired(true);
+ OPTIONS.addOption(new Option("o", "ouput-file", true, "output file"));
+ OPTIONS.getOption("o").setRequired(true);
+ OPTIONS.addOption(new Option("f", "format", true, "input compact.xml file"));
+ OPTIONS.addOption(new Option("r", "run-number", true, "run number for conditions initialization"));
+ }
+
+ private DefaultParser parser = new DefaultParser();
+ private File inputFile = null;
+ private File outputFile = null;
+ private String outputFormat = null;
+ private Integer runNumber = null;
+
+ public static void main(String args[]) throws Exception {
+ DetectorConverter cnv = new DetectorConverter();
+ cnv.run(args);
+ }
+
+ private static List<Converter> getConverters() {
+ Iterator<Converter> iter = getServices(Converter.class);
+ List<Converter> result = new ArrayList<Converter>();
+ while (iter.hasNext()) result.add(iter.next());
+ return result;
+ }
+
+ private static <T> Iterator<T> getServices(Class<T> providerClass) {
+ return ServiceRegistry.lookupProviders(providerClass, DetectorConverter.class.getClassLoader());
+ }
+
+ private void run(String args[]) throws Exception {
+ CommandLine cl = parser.parse(OPTIONS, args);
+ if (!cl.hasOption("i")) {
+ throw new RuntimeException("Missing required -i arg.");
+ }
+ if (!cl.hasOption("o")) {
+ throw new RuntimeException("Missing required -o arg.");
+ }
+ inputFile = new File(cl.getOptionValue("i"));
+ outputFile = new File(cl.getOptionValue("o"));
+ if (cl.hasOption("f")) {
+ outputFormat = cl.getOptionValue("f");
+ }
+ if (cl.hasOption("r")) {
+ runNumber = Integer.parseInt(cl.getOptionValue("r"));
+ } else {
+ runNumber = 0;
+ }
+
+ Converter cnv = null;
+
+ if (outputFormat != null) {
+ for (Converter c : getConverters()) {
+ if (c.getOutputFormat().equalsIgnoreCase(outputFormat)) {
+ cnv = c;
+ break;
+ }
+ }
+ } else {
+ for (Converter c : getConverters()) {
+ if (c.getFileFilter().accept(outputFile))
+ {
+ cnv = c;
+ break;
+ }
+ }
+ }
+ if (cnv == null) throw new IllegalArgumentException("No converter found for format: " + outputFormat);
+
+ if (runNumber != null) {
+ String name = "DUMMY";
+ DatabaseConditionsManager mgr = DatabaseConditionsManager.getInstance();
+ ConditionsReader dummyReader = ConditionsReader.createDummy();
+ ((ConditionsManagerImplementation) mgr).setConditionsReader(dummyReader, name);
+ DummyDetector detector = new DummyDetector(name);
+ mgr.registerConditionsConverter(new DummyConditionsConverter(detector));
+ mgr.setDetector(name, runNumber);
+ }
+
+ InputStream in = new BufferedInputStream(new FileInputStream(inputFile));
+ OutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile));
+ cnv.convert(inputFile.getCanonicalPath(), in, out);
+ in.close();
+ out.close();
+ }
+}
|