Print

Print


Author: [log in to unmask]
Date: Mon Jul  6 15:27:19 2015
New Revision: 3230

Log:
Hand merge some trunk changes that are causing conflicts.

Modified:
    java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunRange.java
    java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java
    java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
    java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java
    java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java

Modified: java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunRange.java
 =============================================================================
--- java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunRange.java	(original)
+++ java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunRange.java	Mon Jul  6 15:27:19 2015
@@ -11,51 +11,24 @@
 import org.apache.commons.csv.CSVRecord;
 
 /**
- * Used with the {@link RunSpreadsheet} to find ranges of runs where columns have the same values so they can be
- * assigned a conditions record with a run start and end range.
+ * Used with the {@link RunSpreadsheet} to find ranges of runs where columns have the same values so they can be assigned
+ * a conditions record with a run start and end range.
  * <p>
  * Bad rows such as ones without run numbers or with invalid data values are skipped and not included in a range.
- *
- * @author Jeremy McCormick, SLAC
+ * 
+ * @author Jeremy McCormick
  */
 public final class RunRange {
 
     /**
-     * Return <code>true</code> if the values are already in the unique values list.
-     *
-     * @param values the list of field values for a row
-     * @param uniqueValuesList the unique values list
-     * @return <code>true</code> if the values are already in the unique values list
-     */
-    private static boolean contains(final Collection<String> values, final List<Collection<String>> uniqueValuesList) {
-        for (final Collection<String> uniqueValues : uniqueValuesList) {
-            final Iterator<String> valuesIterator = values.iterator();
-            final Iterator<String> uniqueValuesIterator = uniqueValues.iterator();
-            boolean equals = true;
-            while (valuesIterator.hasNext() && uniqueValuesIterator.hasNext()) {
-                final String value = valuesIterator.next();
-                final String uniqueValue = uniqueValuesIterator.next();
-                if (!value.equals(uniqueValue)) {
-                    equals = false;
-                    break;
-                }
-            }
-            if (equals) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Find run ranges for conditions data given a set of column names and the full run spreadsheet.
-     *
+     * Find run ranges for conditions data given a set of column names and the full run spreadsheet. 
+     * 
      * @param runSheet the run spreadsheet data (from CSV file)
      * @param columnNames the names of the columns
      * @return the list of run ranges
      */
     public static final List<RunRange> findRunRanges(final RunSpreadsheet runSheet, final Set<String> columnNames) {
-
+        
         final List<RunRange> ranges = new ArrayList<RunRange>();
 
         final Iterator<CSVRecord> it = runSheet.getRecords().iterator();
@@ -69,17 +42,17 @@
             // Is the record valid?
             if (isValidRecord(record, columnNames)) {
                 if (range == null) {
-                    // Create new range for the valid row.
+                    // Create new range for the valid row. 
                     range = new RunRange(columnNames);
-                } else {
+                } else {                    
                     // If this record is not in the range then add a new range.
                     if (!range.inRange(record)) {
                         // Add the current range and create a new one.
                         ranges.add(range);
                         range = new RunRange(columnNames);
                     }
-                }
-
+                }                
+                
                 // Update the range from the current record.
                 range.update(record);
             } else {
@@ -93,30 +66,11 @@
 
         return ranges;
     }
-
-    /**
-     * Get the list of unique values from a set of run ranges.
-     *
-     * @param ranges the run ranges
-     * @return the list of unique values from the field values
-     */
-    public static List<Collection<String>> getUniqueValues(final List<RunRange> ranges) {
-        final Iterator<RunRange> it = ranges.iterator();
-        final List<Collection<String>> uniqueValuesList = new ArrayList<Collection<String>>();
-        while (it.hasNext()) {
-            final RunRange range = it.next();
-            final Collection<String> values = range.getValues();
-            if (!contains(values, uniqueValuesList)) {
-                uniqueValuesList.add(values);
-            }
-        }
-        return uniqueValuesList;
-    }
-
-    /**
-     * Return <code>true</code> if the <code>CSVRecord</code> is valid, which means it has a run number and data in the
-     * columns used by this range.
-     *
+    
+    /**
+     * Return <code>true</code> if the <code>CSVRecord</code> is valid, which means it has a run number and 
+     * data in the columns used by this range.
+     * 
      * @param record the <code>CSVRecord</code> to check
      * @param columnNames the names of the columns
      * @return <code>true</code> if record is valid
@@ -131,8 +85,7 @@
         }
         for (final String columnName : columnNames) {
             // Check that required column data is not null, blank, or empty string.
-            if (record.get(columnName) == null || "".equals(record.get(columnName))
-                    || record.get(columnName).length() == 0) {
+            if (record.get(columnName) == null || "".equals(record.get(columnName)) || record.get(columnName).length() == 0) {                
                 return false;
             }
         }
@@ -157,11 +110,11 @@
     /**
      * The mapping of column names to values.
      */
-    private final Map<String, String> values = new LinkedHashMap<String, String>();
+    private Map<String, String> values = new LinkedHashMap<String, String>();
 
     /**
      * Create a new range.
-     *
+     * 
      * @param columnNames the names of the columns
      */
     RunRange(final Set<String> columnNames) {
@@ -172,8 +125,45 @@
     }
 
     /**
+     * Get the last run number in the range.
+     * 
+     * @return the last run number in the range
+     */
+    public int getRunEnd() {
+        return runEnd;
+    }
+
+    /**
+     * Get the first run number in the range.
+     * 
+     * @return the first run number in the range
+     */
+    public int getRunStart() {
+        return runStart;
+    }
+    
+    /**
+     * Get get value of a field by column name.
+     * 
+     * @param columnName the column name
+     * @return the value of the field
+     */
+    public String getValue(String columnName) {
+        return this.values.get(columnName);
+    }
+    
+    /**
+     * Get the raw values of the data.
+     * 
+     * @return the raw data values
+     */
+    public Collection<String> getValues() {
+        return this.values.values();
+    }
+    
+    /**
      * Get the names of the columns used by this range.
-     *
+     * 
      * @return the names of the columns
      */
     public Set<String> getColumnNames() {
@@ -181,50 +171,13 @@
     }
 
     /**
-     * Get the last run number in the range.
-     *
-     * @return the last run number in the range
-     */
-    public int getRunEnd() {
-        return this.runEnd;
-    }
-
-    /**
-     * Get the first run number in the range.
-     *
-     * @return the first run number in the range
-     */
-    public int getRunStart() {
-        return this.runStart;
-    }
-
-    /**
-     * Get get value of a field by column name.
-     *
-     * @param columnName the column name
-     * @return the value of the field
-     */
-    public String getValue(final String columnName) {
-        return this.values.get(columnName);
-    }
-
-    /**
-     * Get the raw values of the data.
-     *
-     * @return the raw data values
-     */
-    public Collection<String> getValues() {
-        return this.values.values();
-    }
-
-    /**
-     * Return <code>true</code> if the record is in the range, e.g. its data values are the same.
-     *
+     * Return <code>true</code> if the record is in the range, e.g. its data values are the same.    
+     * 
      * @param record the <code>CSVRecord</code> containing the run data
      * @return <code>true</code> if the the record is in range
      */
     private boolean inRange(final CSVRecord record) {
-        for (final String columnName : this.columnNames) {
+        for (final String columnName : columnNames) {
             if (!record.get(columnName).equals(this.values.get(columnName))) {
                 return false;
             }
@@ -233,41 +186,85 @@
     }
 
     /**
+     * Update the range from a record.     
+     * @param record the <code>CSVRecord</code> with the run's data
+     */
+    private void update(final CSVRecord record) {                
+        final int run = Integer.parseInt(record.get("run"));
+        if (run < runStart) {
+            this.runStart = run;
+        }
+        if (run > runEnd) {
+            this.runEnd = run;
+        }
+        if (values.size() == 0) {
+            for (final String columnName : columnNames) {
+                this.values.put(columnName, record.get(columnName));
+            }
+        }
+    }
+    
+    /**
      * Convert this object to a string.
-     *
+     * 
      * @return this object converted to a string
      */
-    @Override
     public String toString() {
-        final StringBuffer sb = new StringBuffer();
+        StringBuffer sb = new StringBuffer();
         sb.append("RunRange { ");
         sb.append("runStart: " + this.runStart + ", ");
         sb.append("runEnd: " + this.runEnd + ", ");
-        for (final String columnName : this.columnNames) {
-            sb.append(columnName + ": " + this.values.get(columnName) + ", ");
+        for (String columnName : columnNames) {
+            sb.append(columnName + ": " + values.get(columnName) + ", " );
         }
         sb.setLength(sb.length() - 2);
         sb.append(" }");
         return sb.toString();
     }
-
-    /**
-     * Update the range from a record.
-     * 
-     * @param record the <code>CSVRecord</code> with the run's data
-     */
-    private void update(final CSVRecord record) {
-        final int run = Integer.parseInt(record.get("run"));
-        if (run < this.runStart) {
-            this.runStart = run;
-        }
-        if (run > this.runEnd) {
-            this.runEnd = run;
-        }
-        if (this.values.size() == 0) {
-            for (final String columnName : this.columnNames) {
-                this.values.put(columnName, record.get(columnName));
-            }
-        }
+    
+    /**
+     * Get the list of unique values from a set of run ranges.
+     * 
+     * @param ranges the run ranges
+     * @return the list of unique values from the field values
+     */
+    public static List<Collection<String>> getUniqueValues(List<RunRange> ranges) {
+        Iterator<RunRange> it = ranges.iterator();        
+        List<Collection<String>> uniqueValuesList = new ArrayList<Collection<String>>();
+        while(it.hasNext()) {        
+            RunRange range = it.next();
+            Collection<String> values = range.getValues();
+            if (!contains(values, uniqueValuesList)) {
+                uniqueValuesList.add(values);
+            }           
+        }
+        return uniqueValuesList;
+    }
+    
+    /**
+     * Return <code>true</code> if the values are already in the unique values list.
+     * 
+     * @param values the list of field values for a row
+     * @param uniqueValuesList the unique values list
+     * @return <code>true</code> if the values are already in the unique values list
+     */
+    private static boolean contains(Collection<String> values, List<Collection<String>> uniqueValuesList) {
+        for (Collection<String> uniqueValues : uniqueValuesList) {
+            Iterator<String> valuesIterator = values.iterator();
+            Iterator<String> uniqueValuesIterator = uniqueValues.iterator();
+            boolean equals = true;
+            while (valuesIterator.hasNext() && uniqueValuesIterator.hasNext()) {
+                String value = valuesIterator.next(); 
+                String uniqueValue = uniqueValuesIterator.next();
+                if (!value.equals(uniqueValue)) {
+                    equals = false;
+                    break;
+                }
+            }
+            if (equals) {
+                return true;
+            }
+        }
+        return false;
     }
 }

Modified: java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java
 =============================================================================
--- java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java	(original)
+++ java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java	Mon Jul  6 15:27:19 2015
@@ -7,104 +7,37 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
 
 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.
+ * 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>.
+ * 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.
+ * 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, SLAC
+ * @author Jeremy McCormick
  */
 public final class RunSpreadsheet {
 
-    public static class RunData {
-
-        private Date endDate;
-        private final CSVRecord record;
-        private final int run;
-        private Date startDate;
-
-        RunData(final CSVRecord record) throws NumberFormatException {
-            this.record = record;
-            this.run = parseRunNumber(this.record);
-            try {
-                this.startDate = RunSpreadsheet.parseStartDate(this.record);
-            } catch (final ParseException e) {
-            }
-            try {
-                this.endDate = RunSpreadsheet.parseEndDate(this.record);
-            } catch (final ParseException e) {
-            }
-        }
-
-        public Date getEndDate() {
-            return this.endDate;
-        }
-
-        public CSVRecord getRecord() {
-            return this.record;
-        }
-
-        public int getRun() {
-            return this.run;
-        }
-
-        public Date getStartDate() {
-            return this.startDate;
-        }
-
-        @Override
-        public String toString() {
-            return "RunData { run: " + this.run + ", startDate: " + this.startDate + ", endDate: " + this.endDate
-                    + " }";
-        }
-    }
-
-    @SuppressWarnings("serial")
-    public static class RunMap extends LinkedHashMap<Integer, RunData> {
-        public RunMap() {
-            super();
-        }
-
-        public RunMap(final List<CSVRecord> records) {
-            super();
-            for (final CSVRecord record : records) {
-                try {
-                    this.addRunData(new RunData(record));
-                } catch (final NumberFormatException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        private void addRunData(final RunData runData) {
-            this.put(runData.getRun(), runData);
-        }
-    }
-
-    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy H:mm");
-
     /**
      * 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"};
+    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).
@@ -119,22 +52,10 @@
                 System.out.print("end date: " + parseEndDate(record) + ", ");
                 System.out.print(record);
                 System.out.println();
-            } catch (final Exception e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
-    }
-
-    private static Date parseEndDate(final CSVRecord record) throws ParseException {
-        return DATE_FORMAT.parse(record.get("date") + " " + record.get("end_time"));
-    }
-
-    private static int parseRunNumber(final CSVRecord record) throws NumberFormatException {
-        return Integer.parseInt(record.get("run"));
-    }
-
-    private static Date parseStartDate(final CSVRecord record) throws ParseException {
-        return DATE_FORMAT.parse(record.get("date") + " " + record.get("start_time"));
     }
 
     /**
@@ -168,13 +89,14 @@
      * @return the <code>CSVRecord</code> or <code>null</code> if not found
      */
     public CSVRecord findRun(final int run) {
-        for (final CSVRecord record : this.records) {
+        for (final CSVRecord record : records) {
             try {
                 if (run == Integer.parseInt(record.get("run"))) {
                     return record;
                 }
             } catch (final NumberFormatException e) {
-                e.printStackTrace();
+                //System.out.println("problem reading run" + run);
+                //e.printStackTrace();
             }
         }
         return null;
@@ -194,12 +116,12 @@
 
         final CSVParser parser = new CSVParser(reader, format);
 
-        this.records = parser.getRecords();
+        records = parser.getRecords();
 
         // Remove first three rows of headers.
-        this.records.remove(0);
-        this.records.remove(0);
-        this.records.remove(0);
+        records.remove(0);
+        records.remove(0);
+        records.remove(0);
 
         parser.close();
     }
@@ -210,34 +132,135 @@
      * @return the list of records read from the CSV file
      */
     public List<CSVRecord> getRecords() {
-        return this.records;
-    }
-
+        return records;
+    }
+    
+    public static final AnotherSimpleDateFormat DATE_FORMAT = new AnotherSimpleDateFormat("MM/dd/yyyy H:mm"); 
+    private static final TimeZone TIME_ZONE =  TimeZone.getTimeZone("EST");
+    
+    
+    @SuppressWarnings("serial")
+    public
+    static class AnotherSimpleDateFormat extends SimpleDateFormat {
+        public AnotherSimpleDateFormat(String formatstring) {
+            super(formatstring);
+            //Calendar c = Calendar.getInstance(TIME_ZONE,Locale.US);
+            //setTimeZone(TIME_ZONE);
+        }
+
+        public Date parse(String source) throws ParseException {
+            setTimeZone(TIME_ZONE);
+            //System.out.println("parse  " + source);
+            Date date = super.parse(source);
+            //System.out.println("update date " + date.toString() + " epoch " + date.getTime());
+            Date dateUpdated = new Date(date.getTime()-3600*1000);
+            //System.out.println("updated date " + dateUpdated.toString() + " epoch " + dateUpdated.getTime());
+            return dateUpdated;
+        }
+        
+    }
+
+    
+    private static Date parseStartDate(CSVRecord record) throws ParseException {
+        //System.out.printf("Start date result of parsing %s %s is %s since epoch %d  \n",record.get("date"), record.get("start_time"),DATE_FORMAT.parse(record.get("date") + " " + record.get("start_time")).toString(), DATE_FORMAT.parse(record.get("date") + " " + record.get("start_time")).getTime() );
+        return DATE_FORMAT.parse(record.get("date") + " " + record.get("start_time"));
+    }
+    
+    private static Date parseEndDate(CSVRecord record) throws ParseException {
+        //DATE_FORMAT.setTimeZone(TIME_ZONE);
+        return DATE_FORMAT.parse(record.get("date") + " " + record.get("end_time"));
+    }
+    
+    private static int parseRunNumber(CSVRecord record) throws NumberFormatException {
+        return Integer.parseInt(record.get("run"));
+    }
+    
+    public static class RunData {
+        
+        private int run;
+        private Date startDate;
+        private Date endDate;
+        private CSVRecord record;
+        
+        RunData(CSVRecord record) throws NumberFormatException {
+            this.record = record;
+            run = parseRunNumber(this.record);
+            try {
+                startDate = RunSpreadsheet.parseStartDate(this.record);
+            } catch (ParseException e) {                
+            }
+            try {
+                endDate = RunSpreadsheet.parseEndDate(this.record);
+            } catch (ParseException e) {                
+            }
+        }
+        
+        public int getRun() {
+            return run;
+        }
+        
+        public Date getStartDate() {
+            return startDate;
+        }
+        
+        public Date getEndDate() {
+            return endDate;
+        }      
+        
+        public String toString() {
+            return "RunData { run: " + run + ", startDate: " + startDate + ", endDate: " + endDate + " }";
+        }
+        
+        public CSVRecord getRecord() {
+            return record;
+        }
+    }
+    
+    @SuppressWarnings("serial")
+    public static class RunMap extends LinkedHashMap<Integer, RunData> {
+        public RunMap() {
+            super();
+        }
+        public RunMap(List<CSVRecord> records) {
+            super();
+            for (final CSVRecord record : records) {
+                try {
+                    addRunData(new RunData(record));
+                } catch (NumberFormatException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        private void addRunData(RunData runData) {
+            this.put(runData.getRun(), runData);
+        }
+    }
+    
     public RunMap getRunMap() {
-        return new RunMap(this.getRecords());
-    }
-
-    public RunMap getRunMap(final List<RunRange> ranges) {
-        final List<CSVRecord> records = new ArrayList<CSVRecord>();
-        for (final RunRange range : ranges) {
-            System.out.println(range.toString());
-            if (range.getColumnNames().contains("run")) {
-                if (!range.getValue("run").isEmpty()) {
-                    final CSVRecord record = this.findRun(Integer.parseInt(range.getValue("run")));
-                    if (record != null) {
-                        records.add(record);
-                    } else {
-                        throw new RuntimeException("this RunRange object was not found. This shouldn't happen. "
-                                + range.toString());
-                    }
-                } else {
-                    throw new RuntimeException("this RunRange object has an empty run value ");
-                }
-            } else {
-                throw new RuntimeException("this RunRange object has no run column? " + range.toString());
-            }
+        return new RunMap(getRecords());
+    } 
+
+    public RunMap getRunMap(List<RunRange> ranges) {
+        List<CSVRecord> records = new ArrayList<CSVRecord>();
+        for(RunRange range : ranges) {
+           //System.out.println(range.toString());
+           if(range.getColumnNames().contains("run")) {
+               if(!range.getValue("run").isEmpty()) {
+                   CSVRecord record = findRun(Integer.parseInt(range.getValue("run")));
+                   if(record!=null) {
+                       records.add(record);
+                   } else {
+                       throw new RuntimeException("this RunRange object was not found. This shouldn't happen. " + range.toString());
+                   }
+               } else {
+                   throw new RuntimeException("this RunRange object has an empty run value ");
+               }
+           } else {
+               throw new RuntimeException("this RunRange object has no run column? " + range.toString());
+           }
         }
         return new RunMap(records);
-    }
-
+    } 
+
+    
 }

Modified: java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
 =============================================================================
--- java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	(original)
+++ java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	Mon Jul  6 15:27:19 2015
@@ -1,5 +1,5 @@
 /**
- *
+ * 
  */
 package org.hps.conditions.svt;
 
@@ -10,6 +10,7 @@
 import hep.aida.IPlotterStyle;
 
 import java.io.File;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
@@ -21,12 +22,13 @@
 
 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.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
+import org.hps.conditions.api.DatabaseObjectException;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.run.RunRange;
 import org.hps.conditions.run.RunSpreadsheet;
@@ -41,20 +43,15 @@
 import org.lcsim.util.log.LogUtil;
 
 /**
- * @author Per Hansson Adrian, SLAC
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
  */
 public class SvtBiasConditionsLoader {
 
-    /**
-     * Setup control plots.
-     */
-    private static AIDA aida = AIDA.defaultInstance();
-    static IDataPointSet dpsBiasRuns = null;
-
-    static IDataPointSet dpsRuns = null;
     private static final Set<String> FIELDS = new HashSet<String>();
-
-    private static Logger logger = LogUtil.create(SvtBiasConditionsLoader.class, new BasicLogFormatter(), Level.INFO);
+    private static Logger logger = LogUtil.create(SvtBiasConditionsLoader.class, new BasicLogFormatter(),Level.INFO);
+    
+
     /**
      * Setup conditions.
      */
@@ -66,224 +63,292 @@
         FIELDS.add("end_time");
     }
 
-    private static IDataPoint addPoint(final IDataPointSet dps, final long mstime, final double val) {
-        final IDataPoint dp = dps.addPoint();
-        dp.coordinate(0).setValue(mstime / 1000.);
+    /**
+     * Setup control plots.
+     */
+    private static AIDA aida = AIDA.defaultInstance();
+    static IDataPointSet dpsRuns = null;
+    static IDataPointSet dpsBiasRuns = null;
+    
+    private static void setupPlots(boolean show) {
+        IDataPointSetFactory dpsf = aida.analysisFactory().createDataPointSetFactory(aida.tree());
+        dpsRuns = dpsf.create("dpsRuns","Run intervals", 2);
+        dpsBiasRuns = dpsf.create("dpsBiasRuns","Bias ON intervals associated with runs", 2);
+        IPlotter plotter = aida.analysisFactory().createPlotterFactory().create("Bias run ranges");
+        IPlotterStyle plotterStyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
+        plotterStyle.xAxisStyle().setParameter("type", "date");
+        plotter.createRegions(1, 3);
+        plotter.region(0).plot(dpsRuns,plotterStyle);
+        plotter.region(1).plot(dpsBiasRuns,plotterStyle);
+        plotter.region(2).plot(dpsRuns,plotterStyle);
+        plotter.region(2).plot(dpsBiasRuns,plotterStyle,"mode=overlay");
+        if(show) plotter.show();
+        
+    }
+    
+    private static IDataPoint addPoint(IDataPointSet dps, long mstime, double val) {
+        IDataPoint dp = dps.addPoint();
+        dp.coordinate(0).setValue(mstime/1000.);
         dp.coordinate(1).setValue(val);
         return dp;
     }
-
-    private final static SvtBiasConstantCollection findCollection(final List<SvtBiasConstantCollection> list,
-            final Date date) {
-        for (final SvtBiasConstantCollection collection : list) {
-            if (collection.find(date) != null) {
-                return collection;
-            }
-        }
-        return null;
-    }
-
+    
+    
+    /**
+     *  Default constructor
+     */
+    public SvtBiasConditionsLoader() {
+    }
+
+    
+    
+    
     /**
      * Check validity of @link RunData
-     *
      * @param data the @link RunData to check
      * @return <code>true</code> if valid, <code>false</code> otherwise.
      */
-    private static boolean isValid(final RunData data) {
-        if (data.getStartDate() == null || data.getEndDate() == null || data.getStartDate().before(new Date(99, 1, 1))) {
-            logger.warning("This run data is not valid: " + data.toString());
+    private static boolean isValid(RunData data) {
+        if(data.getStartDate() == null || data.getEndDate() == null || data.getStartDate().before(new Date(99,1,1))) {
+            logger.fine("This run data is not valid: " + data.toString());
             return false;
-        }
+        } 
         if (data.getStartDate().after(data.getEndDate())) {
             throw new RuntimeException("start date is after end date?!" + data.toString());
         }
         return true;
     }
-
-    private static final void loadToConditionsDB(final List<SvtBiasRunRange> ranges, final boolean doIt) {
+    
+    //private static Options options = null;
+    
+    
+    public static RunMap getRunMapFromSpreadSheet(String path) {
+        // Load in CSV records from the exported run spreadsheet.
+        logger.info(path);
+        final RunSpreadsheet runSheet = new RunSpreadsheet(new File(path));
+
+        // Find the run ranges that have the same fields values.
+        final List<RunRange> ranges = RunRange.findRunRanges(runSheet, FIELDS);
+        logger.info("Found " + ranges.size() + " ranges.");
+        for(RunRange range : ranges) logger.fine(range.toString());
+        // find the run records (has converted dates and stuff) for these ranges
+        RunMap runmap  = runSheet.getRunMap(ranges);
+        logger.info("Found " + runmap.size() + " runs in the run map.");
+        return runmap;
+    }
+    
+    public static List<SvtBiasRunRange> getBiasRunRanges(RunMap runmap,
+            SvtBiasMyaDumpReader biasMyaReader) {
+        List<SvtBiasRunRange> biasRunRanges = new ArrayList<SvtBiasRunRange>();
+        // loop over runs from CSV        
+        RunData prev = null;
+        for(Entry<Integer,RunData> entry : runmap.entrySet()) {
+            int run = entry.getKey();
+            RunData data = entry.getValue();
+            logger.fine("Processing " + run + " " + data.toString());
+            
+            //check that data is ok
+            if (isValid(data)) {
+                if(prev!=null) {
+                    if(isValid(prev)) {
+                        if(prev.getEndDate().after(data.getStartDate())) {
+                            throw new RuntimeException("prev end date after run started?: " + prev.toString() + "   " + data.toString());
+                        } else if(prev.getStartDate().after(data.getEndDate())) {
+                            throw new RuntimeException("prev start date before run ended?: " + prev.toString() + "   " + data.toString());
+                        }
+                    }
+                }
+                
+                // find the bias ranges applicable to this run
+                SvtBiasMyaRanges overlaps = biasMyaReader.findOverlappingRanges(data.getStartDate(), data.getEndDate());
+                logger.fine("Found " + overlaps.size() + " overlapping bias ranges");
+                logger.fine(overlaps.toString());
+
+                biasRunRanges.add(new SvtBiasRunRange(data,overlaps));
+                prev = data;
+
+            }
+        }
+        return biasRunRanges;
+    }
+    
+    
+    
+    
+    
+    /**
+     * Load SVT HV bias constants into the conditions database.
+     * 
+     * @param args the command line arguments (requires a CVS run log file and a MYA dump file.)
+     */
+    public static void main(String[] args) {
+
+        Options options = new Options();
+        options.addOption(new Option("c", true, "CVS run file"));
+        options.addOption(new Option("m", true, "MYA dump file"));
+        options.addOption(new Option("g", false, "Actually load stuff into DB"));
+        options.addOption(new Option("s", false, "Show plots"));
+        
+        final CommandLineParser parser = new PosixParser();
+        CommandLine cl = null;
+        try {
+            cl = parser.parse(options, args);
+        } catch (ParseException e) {
+            throw new RuntimeException("Cannot parse.", e);
+        }
+        
+        if(!cl.hasOption("c") || !cl.hasOption("m")) {
+            printUsage(options);
+            return;
+        }
+        
+        
+        
+        // Setup plots
+        setupPlots(cl.hasOption("s")?true:false);
+
+        
+        // Load in CSV records from the exported run spreadsheet.
+        RunMap runmap = getRunMapFromSpreadSheet(cl.getOptionValue("c"));
+        
+
+        // Load MYA dump
+        SvtBiasMyaDumpReader biasMyaReader = new SvtBiasMyaDumpReader(cl.getOptionValue("m"));
+        logger.info("Got " + biasMyaReader.getRanges().size() + " bias ranges");
+        
+        
+        // Combine them to run ranges when bias was on        
+        // each run may have multiple bias ranges
+        
+        List<SvtBiasRunRange> biasRunRanges = getBiasRunRanges(runmap,biasMyaReader);
+        
+
+        
+        // fill graphs
+        if(cl.hasOption("s")) {
+            for(SvtBiasRunRange r : biasRunRanges) {
+                logger.info(r.toString());
+                if(r.getRun().getRun()>5600) {//9999999999999.0) {
+                    //if(dpsRuns.size()/4.0<500) {//9999999999999.0) {
+                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(),0.0);
+                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(),1.0);
+                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(),1.0);
+                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(),0.0);
+
+                    for(SvtBiasMyaRange br : r.getRanges()) {
+                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.0);
+                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.5);
+                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.5);
+                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.0);
+                    }
+
+
+                }   
+
+            }
+        }
+
+        
+        // load to DB
+        if(cl.hasOption("g")) {
+            loadToConditionsDB(biasRunRanges);
+        }
+    }
+    
+    
+
+    private static void printUsage(Options options) {
+       HelpFormatter formatter  = new HelpFormatter();
+       formatter.printHelp("Need to adhere to these options", options);
+        
+    }
+
+    private final static SvtBiasConstantCollection findCollection(final List<SvtBiasConstantCollection> list, Date date) {
+        for( SvtBiasConstantCollection collection : list) {
+            if(collection.find(date) != null) {
+                return collection;
+            } 
+        }
+        return null;
+    }
+
+    private static final void loadToConditionsDB(List<SvtBiasRunRange> ranges) {
         logger.info("Load to DB...");
-
+        
         // Create a new collection for each run
-        final List<Integer> runsadded = new ArrayList<Integer>();
-
-        for (final SvtBiasRunRange range : ranges) {
+        List<Integer> runsadded = new ArrayList<Integer>();
+        
+        
+        
+        
+        for(SvtBiasRunRange range : ranges) {
             logger.info("Loading " + range.toString());
-            final RunData rundata = range.getRun();
-            if (runsadded.contains(rundata.getRun())) {
+            RunData rundata = range.getRun();
+            if(runsadded.contains(rundata.getRun())) {
                 logger.warning("Run " + Integer.toString(rundata.getRun()) + " was already added?");
                 throw new RuntimeException("Run " + Integer.toString(rundata.getRun()) + " was already added?");
             }
             runsadded.add(rundata.getRun());
-            for (final SvtBiasMyaRange biasRange : range.getRanges()) {
-                // create a collection
-                final SvtBiasConstantCollection collection = new SvtBiasConstantCollection();
-                // create a constant and add to the collection
+
+            if(range.getRanges().isEmpty()) {
+                logger.info("No bias range for run " + range.getRun().getRun());
+                continue;
+            }
+                       
+            //create a collection
+            SvtBiasConstantCollection collection = new SvtBiasConstantCollection();
+            int collectionId = -1;
+            try {
+                collectionId = MANAGER.getCollectionId(collection, "run ranges for SVT HV bias ON");
+            } catch (SQLException e1) {
+               throw new RuntimeException(e1);
+            }
+
+            collection.setCollectionId(collectionId);
+            
+            final ConditionsRecord condition = new ConditionsRecord();
+            condition.setFieldValue("run_start", rundata.getRun());
+            condition.setFieldValue("run_end", rundata.getRun());
+            condition.setFieldValue("name", "svt_bias");
+            condition.setFieldValue("table_name", "svt_bias_constants");
+            condition.setFieldValue("notes", "constants from mya");
+            condition.setFieldValue("created", new Date());
+            condition.setFieldValue("created_by", System.getProperty("user.name"));            
+            condition.setFieldValue("collection_id", collectionId);
+               
+            try {
+            for (SvtBiasMyaRange biasRange : range.getRanges()) {
+                //create a constant and add to the collection
                 final SvtBiasConstant constant = new SvtBiasConstant();
                 constant.setFieldValue("start", biasRange.getStartDate());
                 constant.setFieldValue("end", biasRange.getEndDate());
                 constant.setFieldValue("value", biasRange.getStart().getValue());
+                collection.add(constant);
+                
+                logger.info(condition.toString());
+            }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+            try {
                 try {
-                    collection.add(constant);
-                } catch (final ConditionsObjectException e) {
-                    throw new RuntimeException(e);
+                    collection.insert();
+                } catch (SQLException e) {
+                    throw new RuntimeException("cant instert collection", e);
                 }
-
-                final ConditionsRecord condition = new ConditionsRecord();
-                condition.setFieldValue("run_start", rundata.getRun());
-                condition.setFieldValue("run_end", rundata.getRun());
-                condition.setFieldValue("name", "svt_bias");
-                condition.setFieldValue("table_name", "svt_bias");
-                condition.setFieldValue("notes", "constants from mya");
-                condition.setFieldValue("created", new Date());
-                condition.setFieldValue("created_by", System.getProperty("user.name"));
-
-                condition.setFieldValue("collection_id", collection.getCollectionId());
-
-                logger.info(condition.toString());
-
-                if (doIt) {
-                    try {
-                        condition.insert();
-                    } catch (final Exception e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-            }
-        }
-
-    }
-
-    // private static Options options = null;
-
-    /**
-     * Load SVT HV bias constants into the conditions database.
-     *
-     * @param args the command line arguments (requires a CVS run log file and a MYA dump file.)
-     */
-    public static void main(final String[] args) {
-
-        final Options options = new Options();
-        options.addOption(new Option("c", true, "CVS run file"));
-        options.addOption(new Option("m", true, "MYA dump file"));
-        options.addOption(new Option("g", false, "Actually load stuff into DB"));
-        options.addOption(new Option("s", false, "Show plots"));
-
-        final CommandLineParser parser = new PosixParser();
-        CommandLine cl = null;
-        try {
-            cl = parser.parse(options, args);
-        } catch (final ParseException e) {
-            throw new RuntimeException("Cannot parse.", e);
-        }
-
-        // Setup plots
-        setupPlots(cl.hasOption("s") ? true : false);
-
-        // Load in CSV records from the exported run spreadsheet.
-        final String path = cl.getOptionValue("c");
-        logger.info(path);
-        final RunSpreadsheet runSheet = new RunSpreadsheet(new File(path));
-
-        // Find the run ranges that have the same fields values.
-        final List<RunRange> ranges = RunRange.findRunRanges(runSheet, FIELDS);
-        logger.info("Found " + ranges.size() + " ranges.");
-        for (final RunRange range : ranges) {
-            logger.info(range.toString());
-        }
-        // find the run records (has converted dates and stuff) for these ranges
-        final RunMap runmap = runSheet.getRunMap(ranges);
-        logger.info("Found " + runmap.size() + " runs in the run map.");
-
-        // Load MYA dump
-        final SvtBiasMyaDumpReader biasMyaReader = new SvtBiasMyaDumpReader(cl.getOptionValue("m"));
-        logger.info("Got " + biasMyaReader.getRanges().size() + " bias ranges");
-
-        // Combine them to run ranges when bias was on
-        // each run may have multiple bias ranges
-
-        final List<SvtBiasRunRange> biasRunRanges = new ArrayList<SvtBiasRunRange>();
-        // loop over runs from CSV
-        RunData prev = null;
-        for (final Entry<Integer, RunData> entry : runmap.entrySet()) {
-            final int run = entry.getKey();
-            final RunData data = entry.getValue();
-            logger.info("Processing " + run + " " + data.toString());
-
-            // check that data is ok
-            if (isValid(data)) {
-                if (prev != null) {
-                    if (isValid(prev)) {
-                        if (prev.getEndDate().after(data.getStartDate())) {
-                            throw new RuntimeException("prev end date after run started?: " + prev.toString() + "   "
-                                    + data.toString());
-                        } else if (prev.getStartDate().after(data.getEndDate())) {
-                            throw new RuntimeException("prev start date before run ended?: " + prev.toString() + "   "
-                                    + data.toString());
-                        }
-                    }
-                }
-
-                // find the bias ranges applicable to this run
-                final SvtBiasMyaRanges overlaps = biasMyaReader.findOverlappingRanges(data.getStartDate(),
-                        data.getEndDate());
-                logger.fine("Found " + overlaps.size() + " overlapping bias ranges");
-                logger.fine(overlaps.toString());
-
-                biasRunRanges.add(new SvtBiasRunRange(data, overlaps));
-                prev = data;
-
-            }
-        }
-
-        // fill graphs
-        if (cl.hasOption("s")) {
-            for (final SvtBiasRunRange r : biasRunRanges) {
-                logger.info(r.toString());
-                if (r.getRun().getRun() > 5600) {// 9999999999999.0) {
-                    // if(dpsRuns.size()/4.0<500) {//9999999999999.0) {
-                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(), 0.0);
-                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(), 1.0);
-                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(), 1.0);
-                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(), 0.0);
-
-                    for (final SvtBiasMyaRange br : r.getRanges()) {
-                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(), 0.0);
-                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(), 0.5);
-                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(), 0.5);
-                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(), 0.0);
-                    }
-
-                }
-
-            }
-        }
-
-        // load to DB
-        loadToConditionsDB(biasRunRanges, cl.hasOption("g") ? true : false);
-
-    }
-
-    private static void setupPlots(final boolean show) {
-        final IDataPointSetFactory dpsf = aida.analysisFactory().createDataPointSetFactory(aida.tree());
-        dpsRuns = dpsf.create("dpsRuns", "Run intervals", 2);
-        dpsBiasRuns = dpsf.create("dpsBiasRuns", "Bias ON intervals associated with runs", 2);
-        final IPlotter plotter = aida.analysisFactory().createPlotterFactory().create("Bias run ranges");
-        final IPlotterStyle plotterStyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
-        plotterStyle.xAxisStyle().setParameter("type", "date");
-        plotter.createRegions(1, 3);
-        plotter.region(0).plot(dpsRuns, plotterStyle);
-        plotter.region(1).plot(dpsBiasRuns, plotterStyle);
-        plotter.region(2).plot(dpsRuns, plotterStyle);
-        plotter.region(2).plot(dpsBiasRuns, plotterStyle, "mode=overlay");
-        if (show) {
-            plotter.show();
-        }
-
-    }
-
-    /**
-     * Default constructor
-     */
-    public SvtBiasConditionsLoader() {
-    }
+                condition.insert();
+
+            } catch (DatabaseObjectException | SQLException e) {
+                throw new RuntimeException(e);
+            }
+            
+        }
+
+
+    }
+    
+   
+    
+
 }

Modified: java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java
 =============================================================================
--- java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java	(original)
+++ java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java	Mon Jul  6 15:27:19 2015
@@ -10,12 +10,13 @@
 import org.hps.conditions.database.Table;
 
 /**
+ * 
  * Encapsulates an SVT bias constant, which is range in time where bias was ON.
- *
- * @author Per Hansson Adrian, SLAC
+ * 
+ * @author Per Hansson Adrian <[log in to unmask]>
  */
-@Table(names = "svt_bias")
-@Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
+@Table(names  = "svt_bias_constants")
+@Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
 public final class SvtBiasConstant extends BaseConditionsObject {
 
     /**
@@ -23,51 +24,52 @@
      */
     @SuppressWarnings("serial")
     public static class SvtBiasConstantCollection extends BaseConditionsObjectCollection<SvtBiasConstant> {
-
+        
         /**
          * Find bias constant by date.
-         *
+         * 
          * @param date the offset
          * @return the constant containing the date or <code>null</code> otherwise.
+         * 
          */
-        public SvtBiasConstant find(final Date date) {
-            for (final SvtBiasConstant constant : this) {
-                if (date.after(constant.getStart()) && date.before(constant.getEnd())) {
+        public SvtBiasConstant find(Date date) {
+            for (SvtBiasConstant constant : this) {
+                if(date.after(constant.getStart()) && date.before(constant.getEnd())) {
                     return constant;
                 }
             }
             return null;
         }
     }
+    
+    
+    /**
+     * The start date. 
+     * 
+     * @return the start date
+     */
+    @Field(names = {"start"})
+    public Date getStart() {
+        return getFieldValue("start");
+    }
 
     /**
-     * The end date.
+     * The end date. 
      * 
      * @return the end date
      */
     @Field(names = {"end"})
     public Date getEnd() {
-        return this.getFieldValue("end");
+        return getFieldValue("end");
     }
 
     /**
-     * The start date.
-     * 
-     * @return the start date
-     */
-    @Field(names = {"start"})
-    public Date getStart() {
-        return this.getFieldValue("start");
-    }
-
-    /**
-     * The bias value .
-     * 
+     * The bias value.
+     *  
      * @return the bias value
      */
     @Field(names = {"value"})
-    public double getValue() {
-        return this.getFieldValue("value");
+    public Double getValue() {
+        return getFieldValue("value");
     }
-
 }

Modified: java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java
 =============================================================================
--- java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java	(original)
+++ java/branches/HPSJAVA-488/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java	Mon Jul  6 15:27:19 2015
@@ -9,288 +9,284 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.TimeZone;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.conditions.run.RunSpreadsheet;
 import org.hps.conditions.run.RunSpreadsheet.RunData;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.util.log.LogUtil;
 
-/**
- * @author Per Hansson Adrian, SLAC
- */
+
+
 public class SvtBiasMyaDumpReader {
-
-    public static final class SvtBiasMyaEntry {
-        private final Date date;
-        private final String name;
-        private final double value;
-
-        public SvtBiasMyaEntry(final String name, final Date date, final double value) {
-            this.date = date;
-            this.name = name;
-            this.value = value;
-        }
-
-        public Date getDate() {
-            return this.date;
-        }
-
-        public double getValue() {
-            return this.value;
-        }
-
-        @Override
-        public String toString() {
-            return this.name + " " + this.date.toString() + " value " + this.value;
-        }
-    }
-
-    public static class SvtBiasMyaRange {
-        private SvtBiasMyaEntry end;
-        private SvtBiasMyaEntry start;
-
-        public SvtBiasMyaRange() {
-        }
-
-        public SvtBiasMyaRange(final SvtBiasMyaEntry start) {
-            this.start = start;
-        }
-
-        public SvtBiasMyaEntry getEnd() {
-            return this.end;
-        }
-
-        public Date getEndDate() {
-            return this.getEnd().getDate();
-        }
-
-        public SvtBiasMyaEntry getStart() {
-            return this.start;
-        }
-
-        public Date getStartDate() {
-            return this.getStart().getDate();
-        }
-
-        public boolean overlap(final Date date_start, final Date date_end) {
-            if (date_end.before(this.getStartDate())) {
-                return false;
-            } else if (date_start.after(this.getEndDate())) {
-                return false;
-            }
-            return true;
-        }
-
-        public void setEnd(final SvtBiasMyaEntry end) {
-            this.end = end;
-        }
-
-        public void setStart(final SvtBiasMyaEntry start) {
-            this.start = start;
-        }
-
-        @Override
-        public String toString() {
-            return "START: " + this.start.toString() + "   END: " + this.end.toString();
-        }
-    }
-
-    public static final class SvtBiasMyaRanges extends ArrayList<SvtBiasMyaRange> {
-        public SvtBiasMyaRanges() {
-        }
-
-        public SvtBiasMyaRanges findOverlappingRanges(final Date date_start, final Date date_end) {
-            logger.fine("look for overlaps from " + date_start.toString() + " to " + date_end.toString());
-            final SvtBiasMyaRanges overlaps = new SvtBiasMyaRanges();
-            for (final SvtBiasMyaRange range : this) {
-                logger.fine("loop bias range " + range.toString());
-                if (range.overlap(date_start, date_end)) {
-                    overlaps.add(range);
-                    logger.fine("overlap found!! ");
-                }
-            }
-            return overlaps;
-        }
-
-        @Override
-        public String toString() {
-            final StringBuffer sb = new StringBuffer();
-            for (final SvtBiasMyaRange range : this) {
-                sb.append(range.toString() + "\n");
-            }
-            return sb.toString();
-        }
-    }
-
-    public static final class SvtBiasRunRange {
-        private SvtBiasMyaRanges ranges;
-        private RunData run;
-
-        public SvtBiasRunRange(final RunData run, final SvtBiasMyaRanges ranges) {
-            this.setRun(run);
-            this.setRanges(ranges);
-        }
-
-        public SvtBiasMyaRanges getRanges() {
-            return this.ranges;
-        }
-
-        public RunData getRun() {
-            return this.run;
-        }
-
-        public void setRanges(final SvtBiasMyaRanges ranges) {
-            this.ranges = ranges;
-        }
-
-        public void setRun(final RunData run) {
-            this.run = run;
-        }
-
-        @Override
-        public String toString() {
-            final StringBuffer sb = new StringBuffer();
-            sb.append("\nRun " + this.run.toString() + ":");
-            for (final SvtBiasMyaRange r : this.ranges) {
-                sb.append("\n" + r.toString());
-            }
-            return sb.toString();
-        }
-    }
-
-    private static final double BIASVALUEON = 178.0;
-    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
+    
     private static Logger logger = LogUtil.create(SvtBiasMyaDumpReader.class, new BasicLogFormatter(), Level.INFO);
 
-    public static void main(final String[] args) {
-
-        final SvtBiasMyaDumpReader dumpReader = new SvtBiasMyaDumpReader(args);
-
+    
+    public static void main(String[] args) {
+        
+        SvtBiasMyaDumpReader dumpReader = new SvtBiasMyaDumpReader(args);
+        
         dumpReader.printRanges();
-
-    }
-
-    protected static List<SvtBiasMyaEntry> readMyaDump(final File file) {
-
-        final List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
+      
+        
+    }
+    
+    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    //private static final TimeZone timeZone = TimeZone.getTimeZone("EST");
+    public static final double BIASVALUEON = 178.0;
+    private List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
+    private SvtBiasMyaRanges biasRanges = new SvtBiasMyaRanges();
+    
+    public SvtBiasMyaDumpReader() {
+    }
+
+    public SvtBiasMyaRanges findOverlappingRanges(Date date_start, Date date_end) {
+        return this.biasRanges.findOverlappingRanges(date_start, date_end);
+    }
+    
+    private void readFromFile(File file) {
+        addEntries(readMyaDump(file));
+        logger.info("Got " + getEntries().size() + " entries from " + file.getName());
+       
+    }
+    public void buildFromFiles(String[] args) {
+        for( int i=0; i<args.length; ++i) {
+            readFromFile(new File(args[i]));
+        }
+        buildRanges();       
+    }
+    
+    public SvtBiasMyaDumpReader(String[] args) {
+        buildFromFiles(args);
+    }
+    
+    public SvtBiasMyaDumpReader(String filepath) {
+        String[] files = {filepath};
+        buildFromFiles(files);
+    }
+
+    
+    public void addEntry(SvtBiasMyaEntry e) {
+        this.myaEntries.add(e);
+    }
+
+    public void addEntries(List<SvtBiasMyaEntry> e) {
+        this.myaEntries.addAll(e);
+    }
+
+    public List<SvtBiasMyaEntry> getEntries() {
+        return this.myaEntries;
+    }
+
+    public SvtBiasMyaRanges getRanges() {
+        return this.biasRanges;
+    }
+
+    
+    private void printRanges() {
+        for( SvtBiasMyaRange r : biasRanges) {
+            logger.info(r.toString());
+        }
+     }
+    
+    
+    protected static List<SvtBiasMyaEntry> readMyaDump(File file) {
+
+        List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
         try {
 
-            final BufferedReader br = new BufferedReader(new FileReader(file));
+            BufferedReader br = new BufferedReader(new FileReader(file));
             String line;
             while ((line = br.readLine()) != null) {
-                // System.out.println(line);
-                final String arr[] = line.split(" ");
+                //System.out.println(line);
+                String arr[] = line.split(" ");
                 try {
-
-                    if (arr.length < 3) {
-                        throw new ParseException("this line is not correct.", 0);
+                    
+                    if(arr.length<3) {
+                        throw new ParseException("this line is not correct.",0);
                     }
-                    final Date date = DATE_FORMAT.parse(arr[0] + " " + arr[1]);
-                    final double value = Double.parseDouble(arr[2]);
-                    final SvtBiasMyaEntry entry = new SvtBiasMyaEntry(file.getName(), date, value);
+                    
+                    Date date = DATE_FORMAT.parse(arr[0] + " " + arr[1]);
+                    double value = Double.parseDouble(arr[2]);
+                    SvtBiasMyaEntry entry = new SvtBiasMyaEntry(file.getName(), date, value);
                     myaEntries.add(entry);
-                } catch (final ParseException e) {
+                } catch (ParseException e) {
                     e.printStackTrace();
                 }
             }
             br.close();
 
-        } catch (final IOException e) {
+        } catch (IOException e) {
             e.printStackTrace();
         }
         return myaEntries;
 
     }
-
-    private final SvtBiasMyaRanges biasRanges = new SvtBiasMyaRanges();
-
-    private final List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
-
-    public SvtBiasMyaDumpReader() {
-    }
-
-    public SvtBiasMyaDumpReader(final String filepath) {
-        final String[] files = {filepath};
-        this.buildFromFiles(files);
-    }
-
-    public SvtBiasMyaDumpReader(final String[] args) {
-        this.buildFromFiles(args);
-    }
-
-    public void addEntries(final List<SvtBiasMyaEntry> e) {
-        this.myaEntries.addAll(e);
-    }
-
-    public void addEntry(final SvtBiasMyaEntry e) {
-        this.myaEntries.add(e);
-    }
-
-    public void buildFromFiles(final String[] args) {
-        for (final String arg : args) {
-            this.readFromFile(new File(arg));
-        }
-        this.buildRanges();
-    }
-
+    
     public void buildRanges() {
         SvtBiasMyaRange range = null;
         SvtBiasMyaEntry eprev = null;
-        for (final SvtBiasMyaEntry e : this.myaEntries) {
-
-            // System.out.println(e.toString());
-
-            if (eprev != null) {
-                if (e.getDate().before(eprev.getDate())) {
+        for(SvtBiasMyaEntry e : this.myaEntries) {
+            
+            //System.out.println(e.toString());
+            
+            if(eprev!=null) {
+                if(e.getDate().before(eprev.getDate())) {
                     throw new RuntimeException("date list is not ordered: " + eprev.toString() + " vs " + e.toString());
                 }
             }
-
-            if (e.getValue() > BIASVALUEON) {
-                if (range == null) {
+            
+            if( e.getValue() > BIASVALUEON) {
+                if (range==null) {
                     logger.fine("BIAS ON: " + e.toString());
                     range = new SvtBiasMyaRange();
                     range.setStart(e);
-                }
+                } 
             } else {
-                // close it
-                if (range != null) {
+                //close it
+                if (range!=null) {
                     logger.fine("BIAS TURNED OFF: " + e.toString());
                     range.setEnd(e);
                     this.biasRanges.add(range);
                     range = null;
                 }
-            }
+            }            
             eprev = e;
         }
         logger.info("Built " + this.biasRanges.size() + " ranges");
-
-    }
-
-    public SvtBiasMyaRanges findOverlappingRanges(final Date date_start, final Date date_end) {
-        return this.biasRanges.findOverlappingRanges(date_start, date_end);
-    }
-
-    public List<SvtBiasMyaEntry> getEntries() {
-        return this.myaEntries;
-    }
-
-    public SvtBiasMyaRanges getRanges() {
-        return this.biasRanges;
-    }
-
-    private void printRanges() {
-        for (final SvtBiasMyaRange r : this.biasRanges) {
-            logger.info(r.toString());
-        }
-    }
-
-    private void readFromFile(final File file) {
-        this.addEntries(readMyaDump(file));
-        logger.info("Got " + this.getEntries().size() + " entries from " + file.getName());
-
-    }
+        
+    }
+    
+    
+    public static final class SvtBiasMyaEntry {
+        private Date date;
+        private String name;
+        private double value;
+        public SvtBiasMyaEntry(String name, Date date, double value) {
+            this.date = date;
+            this.name = name;
+            this.value = value;
+        }
+        public double getValue() {
+            return value;
+        }
+        public Date getDate() {
+            return this.date;
+        }
+        public String toString() {
+            return name + " " + date.toString() + " (epoch " + Long.toString(date.getTime()) + ")" + " value " + value;
+        }
+    }
+
+
+    
+    public static final class SvtBiasMyaRanges extends ArrayList<SvtBiasMyaRange> {
+        public SvtBiasMyaRanges() {}
+        public SvtBiasMyaRanges findOverlappingRanges(Date date_start, Date date_end) {
+            logger.fine("look for overlaps from " + date_start.toString() + " to " + date_end.toString());
+            SvtBiasMyaRanges overlaps = new SvtBiasMyaRanges();
+            for(SvtBiasMyaRange range : this) {
+                logger.fine("loop bias range " + range.toString());
+                if( range.overlap(date_start,date_end) ) {
+                    overlaps.add(range);
+                    logger.fine("overlap found!! ");
+                }
+            }
+            return overlaps;
+        }
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            for(SvtBiasMyaRange range : this) {
+                sb.append(range.toString() + "\n");
+            }
+            return sb.toString();
+        }
+        
+        public boolean includes(Date date) {
+            for(SvtBiasMyaRange r : this) {
+                if(r.includes(date)) return true;
+            }
+            return false;
+        }
+        
+    }
+    
+    public static class SvtBiasMyaRange {
+        private SvtBiasMyaEntry start;
+        private SvtBiasMyaEntry end;
+        public SvtBiasMyaRange() {}
+        public Date getStartDate() {
+            return getStart().getDate();
+        }
+        public Date getEndDate() {
+            return getEnd().getDate();
+        }
+        public boolean overlap(Date date_start, Date date_end) {
+            if( date_end.before(getStartDate()) ) {
+                return false;
+            } else if ( date_start.after(getEndDate())) {
+                return false;
+            } 
+            return true;
+        }
+        public SvtBiasMyaRange(SvtBiasMyaEntry start) {
+            this.start = start;
+        }
+        public SvtBiasMyaEntry getEnd() {
+            return end;
+        }
+        public void setEnd(SvtBiasMyaEntry end) {
+            this.end = end;
+        }
+        public SvtBiasMyaEntry getStart() {
+            return start;
+        }
+        public void setStart(SvtBiasMyaEntry start) {
+            this.start = start;
+        }
+        public String toString() {
+            return "START: " + start.toString() + "   END: " + end.toString();
+        }
+        public boolean includes(Date date) {
+            if( date.before(getStartDate()) || date.after(getEndDate()) ) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+    }
+    
+    public static final class SvtBiasRunRange {
+        private RunData run;
+        private SvtBiasMyaRanges ranges;
+        public SvtBiasRunRange(RunData run, SvtBiasMyaRanges ranges) {
+            setRun(run);
+            setRanges(ranges);
+        }
+        public RunData getRun() {
+            return run;
+        }
+        public void setRun(RunData run) {
+            this.run = run;
+        }
+        public SvtBiasMyaRanges getRanges() {
+            return ranges;
+        }
+        public void setRanges(SvtBiasMyaRanges ranges) {
+            this.ranges = ranges;
+        }
+        public String toString() {
+            StringBuffer sb  = new StringBuffer();
+            sb.append("\nRun " + run.toString() + ":");
+            for (SvtBiasMyaRange r : ranges) {
+                sb.append("\n" + r.toString());
+            }
+            return sb.toString();
+        }
+    }
+    
 
 }