Print

Print


Author: [log in to unmask]
Date: Mon Dec 15 15:58:30 2014
New Revision: 1740

Log:
Corrections and cleanup to calibrations Driver.

Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java	Mon Dec 15 15:58:30 2014
@@ -20,6 +20,7 @@
 
 import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
+import org.hps.conditions.api.FieldValueMap;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableConstants;
 import org.hps.conditions.database.TableMetaData;
@@ -57,6 +58,15 @@
     File outputFile = null;
     Set<Integer> runs = new HashSet<Integer>();
     static DecimalFormat decimalFormat = new DecimalFormat("#.####");
+    String inputHitsCollectionName = "EcalReadoutHits";
+    
+    /**
+     * Set the RawTrackerHit collection of hits to be used for the calibration.
+     * @param inputHitsCollectionName The name of the input hits collection.
+     */
+    public void setInputHitsCollectionName(String inputHitsCollectionName) {
+        this.inputHitsCollectionName = inputHitsCollectionName;
+    }
     
     /**
      * Set whether to automatically load the conditions into the database.
@@ -113,8 +123,10 @@
      * Check that the run numbers are valid.
      */
     public void startOfData() {
-        if (runEnd < runStart) {
-            throw new IllegalArgumentException("The runEnd must be >= runStart.");
+        if (runStart != null && runEnd != null) {
+            if (runEnd < runStart) {
+                throw new IllegalArgumentException("The runEnd must be >= runStart.");
+            }
         }
     }
         
@@ -138,8 +150,8 @@
     @Override
     public void process(EventHeader event) {
         runs.add(event.getRunNumber());
-        if (event.hasCollection(RawTrackerHit.class, "EcalReadoutHits")) {
-            List<RawTrackerHit> hits = event.get(RawTrackerHit.class, "EcalReadoutHits");
+        if (event.hasCollection(RawTrackerHit.class, inputHitsCollectionName)) {
+            List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputHitsCollectionName);
             for (RawTrackerHit hit : hits) {
                 EcalChannel channel = ecalConditions.getChannelCollection().findGeometric(hit.getCellID());
                 if (channel != null) {
@@ -149,6 +161,9 @@
                     }
                 }
             }
+        } else {
+            // If the input collection does not exist in the event, this is considered a fatal error.
+            throw new RuntimeException("The collection " + this.inputHitsCollectionName + " does not exist in the event.");
         }
     }
     
@@ -240,9 +255,18 @@
     private void writeToFile(EcalCalibrationCollection calibrations, String fieldNames) {
         FileWriter writer = null;
         try {
-            writer = new FileWriter(outputFile);
-            writer.write(fieldNames);
-            writer.write(calibrations.toString());
+            writer = new FileWriter(outputFile); 
+            StringBuffer buff = new StringBuffer(fieldNames);
+            buff.append('\n');
+            for (EcalCalibration calibration : calibrations) {
+                FieldValueMap fieldValues = calibration.getFieldValues();
+                for (String field : fieldValues.keySet()) {
+                    buff.append(fieldValues.get(field) + " ");
+                }
+                buff.setLength(buff.length() - 1);
+                buff.append('\n');
+            }            
+            writer.write(buff.toString());
         } catch (IOException e) {
             throw new RuntimeException("There was a problem writing to the output file.", e);
         } finally {