Author: [log in to unmask]
Date: Fri Jan 16 15:57:30 2015
New Revision: 1947
Log:
Add simple tool for importing beam conditions from text dump.
Added:
java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java
Added: java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java (added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java Fri Jan 16 15:57:30 2015
@@ -0,0 +1,110 @@
+package org.hps.conditions.beam;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+
+import org.hps.conditions.api.ConditionsRecord;
+import org.hps.conditions.beam.BeamConditions.BeamConditionsCollection;
+import org.hps.conditions.database.DatabaseConditionsManager;
+
+/**
+ * <p>
+ * Import beam measurements into the database from a text file.
+ * <p>
+ * This has the format:<br/>
+ * run current x y
+ * <p>
+ * The beam energy is hard-coded to 1.92 GeV for now, pending updates with better information.
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public final class ImportBeamConditionsEngRun {
+
+ static double beamEnergy = 1.92;
+ static double nullValue = -999.0;
+
+ private ImportBeamConditionsEngRun() {
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ if (args.length == 0) {
+ throw new RuntimeException("missing file list argument");
+ }
+
+ String fileName = args[0];
+ if (!new File(fileName).exists()) {
+ throw new IOException("The file " + fileName + " does not exist.");
+ }
+
+ Map<Integer, BeamConditions> beamMap = new LinkedHashMap<Integer, BeamConditions>();
+
+ BufferedReader reader = new BufferedReader(new FileReader(fileName));
+ String line;
+ while ((line = reader.readLine()) != null) {
+
+ String[] values = line.split(" ");
+
+ BeamConditions beam = new BeamConditions();
+
+ setValue(beam, "current", values[1]);
+ setValue(beam, "position_x", values[2]);
+ setValue(beam, "position_y", values[3]);
+
+ if (beam.getFieldValue("current") == null) {
+ // Use null value to indicate beam was not measured.
+ beam.setFieldValue("energy", null);
+ } else if (((Double)beam.getFieldValue("current")) == 0) {
+ // Use zero for no beam.
+ beam.setFieldValue("energy", 0);
+ } else {
+ // Use nominal beam energy from ECAL commissioning.
+ beam.setFieldValue("energy", beamEnergy);
+ }
+
+ beamMap.put(Integer.parseInt(values[0]), beam);
+ }
+ reader.close();
+
+ System.out.println("printing beam conditions parsed from " + fileName + " ...");
+ System.out.println("run id current x y energy");
+ for (Entry<Integer, BeamConditions> entry : beamMap.entrySet()) {
+ System.out.print(entry.getKey() + " ");
+ System.out.println(entry.getValue() + " ");
+ }
+
+ DatabaseConditionsManager manager = new DatabaseConditionsManager();
+ manager.setLogLevel(Level.ALL);
+ manager.openConnection();
+
+ for (Entry<Integer, BeamConditions> entry : beamMap.entrySet()) {
+ int run = entry.getKey();
+ BeamConditions beam = entry.getValue();
+ int collectionId = manager.getNextCollectionID("beam");
+ ConditionsRecord record =
+ new ConditionsRecord(collectionId, run, run, "beam", "beam", "imported from HPS_Runs.pdf", "eng_run");
+ System.out.println(record);
+ System.out.println(beam);
+ BeamConditionsCollection collection = new BeamConditionsCollection();
+ collection.add(beam);
+ manager.insertCollection(collection);
+ record.insert();
+ }
+ manager.closeConnection();
+ }
+
+ static void setValue(BeamConditions beam, String fieldName, String rawValue) {
+ double value = Double.parseDouble(rawValue);
+ if (value != nullValue) {
+ beam.setFieldValue(fieldName, value);
+ } else {
+ beam.setFieldValue(fieldName, null);
+ }
+ }
+}
|