Print

Print


Author: [log in to unmask]
Date: Wed May 27 11:29:58 2015
New Revision: 3031

Log:
Add simple Java class to read data from a CSV export of the run spreadsheet.

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/run/
    java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java

Added: java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java	Wed May 27 11:29:58 2015
@@ -0,0 +1,121 @@
+package org.hps.conditions.run;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+
+/**
+ * A simple representation of the 2015 run spreadsheet (runs from 3/28 to 5/19) read from an exported CSV file as a list of records.
+ * <p>
+ * Master copy of the spreadsheet is located at 
+ * <a href="https://docs.google.com/spreadsheets/d/1l1NurPpsmpgZKgr1qoQpLQBBLz1sszLz4xZF-So4xs8/edit#gid=43855609">HPS_Runs_2015</a>.
+ * <p>
+ * The rows are accessible as raw CSV data through the Apache Commons CSV library, and this data must be manually cleaned up and converted 
+ * to the correct data type before being inserted into the conditions database.
+ *
+ * @author Jeremy McCormick
+ */
+public final class RunSpreadsheet {
+
+    /**
+     * The column headers.
+     */
+    private static String[] HEADERS = {"run", "date", "start_time", "end_time", "to_tape", "n_events", "trigger_rate", "target", "beam_current",
+        "beam_x", "beam_y", "trigger_config", "ecal_fadc_mode", "ecal_fadc_thresh", "ecal_fadc_window", "ecal_cluster_thresh_seed", "ecal_cluster_thresh_cluster",
+        "ecal_cluster_window_hits", "ecal_cluster_window_pairs", "ecal_scalers_fadc", "ecal_scalers_dsc", "svt_y_position", "svt_offset_phase", "svt_offset_time",
+        "ecal_temp", "ecal_lv_current", "notes"};
+
+    /**
+     * Read the CSV file from the command line and print the data to the terminal (just a basic test).
+     *
+     * @param args the command line arguments
+     */
+    public static void main(final String args[]) {
+        final RunSpreadsheet runSpreadsheet = new RunSpreadsheet(new File(args[0]));
+        for (final CSVRecord record : runSpreadsheet.getRecords()) {
+            System.out.println(record);
+        }
+    }
+
+    /**
+     * The input CSV file.
+     */
+    private final File file;
+
+    /**
+     * The list of records read from the CSV file.
+     */
+    private List<CSVRecord> records;
+
+    /**
+     * Read the data from a CSV export of the run spreadsheet.
+     *
+     * @param file the CSV file
+     */
+    public RunSpreadsheet(final File file) {
+        this.file = file;
+        try {
+            this.fromCsv(this.file);
+        } catch (final Exception e) {
+            throw new RuntimeException();
+        }
+    }
+
+    /**
+     * Find the record for a run in the list of records.
+     *
+     * @param run the run number
+     * @return the <code>CSVRecord</code> or <code>null</code> if not found
+     */
+    public CSVRecord findRun(final int run) {
+        for (final CSVRecord record : records) {
+            try {
+                if (run == Integer.parseInt(record.get("run_number"))) {
+                    return record;
+                }
+            } catch (final NumberFormatException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Read all the records from the CSV file.
+     *
+     * @param file the CSV file
+     * @throws FileNotFoundException if file does not exist
+     * @throws IOException if there is an IO error
+     */
+    private void fromCsv(final File file) throws FileNotFoundException, IOException {
+
+        final FileReader reader = new FileReader(file);
+        final CSVFormat format = CSVFormat.DEFAULT.withHeader(HEADERS);
+
+        final CSVParser parser = new CSVParser(reader, format);
+
+        records = parser.getRecords();
+
+        // Remove first three rows of headers.
+        records.remove(0);
+        records.remove(0);
+        records.remove(0);
+
+        parser.close();
+    }
+
+    /**
+     * Get the list of records read from the CSV file.
+     *
+     * @return the list of records read from the CSV file
+     */
+    public List<CSVRecord> getRecords() {
+        return records;
+    }
+}