Print

Print


Author: [log in to unmask]
Date: Mon Jul 27 16:18:54 2015
New Revision: 3283

Log:
add new reader for different MYA dump format

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java
      - copied, changed from r3272, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java
Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	Mon Jul 27 16:18:54 2015
@@ -1,6 +1,3 @@
-/**
- * 
- */
 package org.hps.conditions.svt;
 
 import hep.aida.*;
@@ -10,7 +7,6 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -24,7 +20,6 @@
 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.database.DatabaseConditionsManager;
 import org.hps.conditions.run.RunRange;
@@ -35,7 +30,6 @@
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasMyaRange;
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasMyaRanges;
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasRunRange;
-import org.hps.conditions.svt.SvtTimingConstants.SvtTimingConstantsCollection;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.log.LogUtil;
@@ -47,13 +41,13 @@
 public class SvtBiasConditionsLoader {
 
     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.
      */
     private static final DatabaseConditionsManager MANAGER = DatabaseConditionsManager.getInstance();
+
     static {
         FIELDS.add("run");
         FIELDS.add("date");
@@ -64,62 +58,59 @@
     /**
      * Setup control plots.
      */
-    private static AIDA aida = AIDA.defaultInstance();
+    private static final 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);
+        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();
-        
-    }
-    
+        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(0).setValue(mstime / 1000.);
         dp.coordinate(1).setValue(val);
         return dp;
     }
-    
-    
-    /**
-     *  Default constructor
+
+    /**
+     * 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(RunData data) {
-        if(data.getStartDate() == null || data.getEndDate() == null || data.getStartDate().before(new Date(99,1,1))) {
+        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 Options options = null;
-    
-    
     public static RunMap getRunMapFromSpreadSheet(String path) {
         // Load in CSV records from the exported run spreadsheet.
         logger.info(path);
@@ -128,65 +119,66 @@
         // 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());
+        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);
+        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()) {
+        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())) {
+                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())) {
+                        } 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));
+                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.)
+     *
+     * @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("t", true, "run table from crawler"));
+//        options.addOption(new Option("d", true, "myaData 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 {
@@ -194,83 +186,77 @@
         } catch (ParseException e) {
             throw new RuntimeException("Cannot parse.", e);
         }
-        
-        if(!cl.hasOption("c") || !cl.hasOption("m")) {
-            printUsage(options);
-            return;
-        }
-        
-        
-        
+
+//        if (!cl.hasOption("c") || !cl.hasOption("m")) {
+//            printUsage(options);
+//            return;
+//        }
         // Setup plots
-        setupPlots(cl.hasOption("s")?true:false);
-
-        
+        setupPlots(cl.hasOption("s"));
+
         // 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");
-        
-        
+
+//        if (cl.hasOption("d")) {
+//            List<SvtBiasMyaDataReader.SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(cl.getOptionValue("d")), 178.0, 2000);
+//        }
+//
+//        if (cl.hasOption("t")) {
+//            List<SvtBiasMyaDataReader.RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(cl.getOptionValue("t")));
+//        }
         // Combine them to run ranges when bias was on        
         // each run may have multiple bias ranges
-        
-        List<SvtBiasRunRange> biasRunRanges = getBiasRunRanges(runmap,biasMyaReader);
-        
-
-        
+        List<SvtBiasRunRange> biasRunRanges = getBiasRunRanges(runmap, biasMyaReader);
+
         // fill graphs
-        if(cl.hasOption("s")) {
-            for(SvtBiasRunRange r : biasRunRanges) {
+        if (cl.hasOption("s")) {
+            for (SvtBiasRunRange r : biasRunRanges) {
                 logger.info(r.toString());
-                if(r.getRun().getRun()>5600) {//9999999999999.0) {
+                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);
+                    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")) {
+        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) {
+        HelpFormatter formatter = new HelpFormatter();
+        formatter.printHelp("Need to adhere to these options", options);
+
+    }
+
+    private 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) {
+    private static void loadToConditionsDB(List<SvtBiasRunRange> ranges) {
         logger.info("Load to DB...");
 
         // Create a new collection for each run
@@ -323,10 +309,10 @@
                     collection.add(constant);
                     logger.info(condition.toString());
                 }
-                
+
                 // Insert collection data.
                 collection.insert();
-                
+
                 // Insert conditions record.
                 condition.insert();
 

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java (from r3272, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java)
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java	Mon Jul 27 16:18:54 2015
@@ -2,117 +2,157 @@
 
 import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
+import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
+import java.util.Iterator;
 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;
-
-
-
-public class SvtBiasMyaDumpReader {
-    
-    private static Logger logger = LogUtil.create(SvtBiasMyaDumpReader.class, new BasicLogFormatter(), Level.INFO);
-
-    
+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.PosixParser;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+
+public class SvtBiasMyaDataReader {
+
     public static void main(String[] args) {
-        
-        SvtBiasMyaDumpReader dumpReader = new SvtBiasMyaDumpReader(args);
-        
-        dumpReader.printRanges();
-      
-        
-    }
-    
-    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Options options = new Options();
+        options.addOption(new Option("q", false, "quiet - don't print event contents"));
+        options.addOption(new Option("c", false, "print control events"));
+        options.addOption(new Option("s", false, "sequential read (not mem-mapped)"));
+
+        // Parse the command line options.
+        if (args.length == 0) {
+            System.out.println("SvtBiasMyaDataReader <myaData dump> <run time table - tab separated>");
+            final HelpFormatter help = new HelpFormatter();
+            help.printHelp(" ", options);
+            System.exit(1);
+        }
+
+        final CommandLineParser parser = new PosixParser();
+        CommandLine cl = null;
+        try {
+            cl = parser.parse(options, args);
+        } catch (final org.apache.commons.cli.ParseException e) {
+            throw new RuntimeException("Problem parsing command line options.", e);
+        }
+
+        if (cl.getArgs().length != 2) {
+            throw new RuntimeException("Missing myData dump or run time file.");
+        }
+
+        List<SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(cl.getArgs()[0]), 178.0, 2000);
+
+//        for (SvtBiasMyaRange range : ranges) {
+//            System.out.println(range);
+//        }
+        List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(cl.getArgs()[1]));
+
+        List<SvtBiasRunRange> runRanges = new ArrayList<SvtBiasRunRange>();
+
+        Iterator<SvtBiasMyaRange> rangesIter = ranges.iterator();
+        SvtBiasMyaRange nextRange = rangesIter.next();
+
+        runLoop:
+        for (RunData data : runData) {
+
+            while (nextRange.getEnd().before(data.getStart())) {
+                nextRange = rangesIter.next();
+                if (!rangesIter.hasNext()) {
+                    break runLoop;
+                }
+            }
+            while (nextRange.getStart().before(data.getEnd())) {
+                runRanges.add(new SvtBiasRunRange(data, nextRange));
+                nextRange = rangesIter.next();
+                if (!rangesIter.hasNext()) {
+                    break runLoop;
+                }
+            }
+//            System.out.println(data);
+        }
+
+        for (SvtBiasRunRange runRange : runRanges) {
+            System.out.println(runRange);
+        }
+
+//        
+//        boolean quiet = cl.hasOption("q");
+//        boolean printControlEvents = cl.hasOption("c");
+//        boolean seqRead = cl.hasOption("s");
+//
+//        SvtBiasMyaDataReader dumpReader = new SvtBiasMyaDataReader(args);
+//
+//        dumpReader.printRanges();
+    }
+
+//    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>();
+    public SvtBiasMyaDataReader(double biasValueOn, int endMargin) {
+    }
+
+    public static List<SvtBiasMyaRange> readMyaData(File file, double biasValueOn, int endMargin) {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
+
+        List<SvtBiasMyaRange> ranges = new ArrayList<SvtBiasMyaRange>();
         try {
 
             BufferedReader br = new BufferedReader(new FileReader(file));
             String line;
+            System.out.println(br.readLine());
+
+            SvtBiasMyaRange currentRange = null;
             while ((line = br.readLine()) != null) {
                 //System.out.println(line);
-                String arr[] = line.split(" ");
+                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);
                     }
-                    
-                    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);
+
+                    Date date = dateFormat.parse(arr[0] + " " + arr[1]);
+                    Double[] values = new Double[arr.length - 2];
+                    for (int i = 2; i < arr.length; i++) {
+                        if (arr[i].equals("<undefined>")) {
+                            values[i - 2] = 0.0;
+                        } else {
+                            values[i - 2] = Double.parseDouble(arr[i]);
+                        }
+                    }
+                    double biasValue = Collections.min(Arrays.asList(values));
+                    if (biasValue > biasValueOn) {
+                        if (currentRange == null) {
+                            currentRange = new SvtBiasMyaRange(date, biasValue);
+//                            System.out.format("bias on:\t%d %d %f %s\n", date.getTime(), values.length, biasValue, date.toString());
+                        }
+                    } else {
+                        if (currentRange != null) {
+                            currentRange.setEnd(new Date(date.getTime() - endMargin));
+                            ranges.add(currentRange);
+                            currentRange = null;
+//                            System.out.format("bias off:\t%d %d %f %s\n", date.getTime(), values.length, biasValue, date.toString());
+                        }
+                    }
+//                    System.out.format("%d %d %f\n", date.getTime(), values.length, biasValue);
+//                    SvtBiasMyaEntry entry = new SvtBiasMyaEntry(file.getName(), date, value);
+//                    myaEntries.add(entry);
                 } catch (ParseException e) {
                     e.printStackTrace();
                 }
@@ -122,171 +162,153 @@
         } catch (IOException e) {
             e.printStackTrace();
         }
-        return myaEntries;
-
-    }
-    
-    public void buildRanges() {
-        SvtBiasMyaRange range = null;
-        SvtBiasMyaEntry eprev = null;
-        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());
-                }
+
+        return ranges;
+    }
+
+    public static List<RunData> readRunTable(File file) {
+        List<CSVRecord> records = null;
+        List<RunData> data = new ArrayList<RunData>();
+        try {
+            FileReader reader = new FileReader(file);
+            final CSVFormat format = CSVFormat.DEFAULT;
+
+            final CSVParser parser;
+            parser = new CSVParser(reader, format);
+
+            records = parser.getRecords();
+
+            // Remove first two rows of headers.
+            records.remove(0);
+            records.remove(0);
+
+            parser.close();
+        } catch (FileNotFoundException ex) {
+            Logger.getLogger(SvtBiasMyaDataReader.class.getName()).log(Level.SEVERE, null, ex);
+        } catch (IOException ex) {
+            Logger.getLogger(SvtBiasMyaDataReader.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+        for (CSVRecord record : records) {
+            int runNum = Integer.parseInt(record.get(0));
+            long startTime = Long.parseLong(record.get(7)) * 1000;
+            long endTime = Long.parseLong(record.get(8)) * 1000;
+            if (startTime != 0 && endTime != 0) {
+                data.add(new RunData(new Date(startTime), new Date(endTime), runNum));
             }
-            
-            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) {
-                    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 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;
-        }
+        }
+
+        return data;
+    }
+
+    public static class SvtBiasMyaRange {
+
+        private Date start;
+        private Date end;
+        private double bias;
+
+        public SvtBiasMyaRange() {
+        }
+
+//        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(Date start, double bias) {
+            this.start = start;
+            this.bias = bias;
+        }
+
+        public Date getEnd() {
+            return end;
+        }
+
+        public void setEnd(Date end) {
+            this.end = end;
+        }
+
+        public Date getStart() {
+            return start;
+        }
+
+        @Override
         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;
-        }
+            return String.format("START: %s (%d), END: %s (%d), bias: %f, duration: %d", start.toString(), start.getTime(), end.toString(), end.getTime(), bias, end.getTime() - start.getTime());
+        }
+
+        public boolean includes(Date date) {
+            return !date.before(getStart()) && !date.after(getEnd());
+        }
+    }
+
+    public static class RunData {
+
+        private final Date start;
+        private final Date end;
+        private final int run;
+
+        public RunData(Date start, Date end, int run) {
+            this.start = start;
+            this.end = end;
+            this.run = run;
+        }
+
+        public Date getStart() {
+            return start;
+        }
+
+        public Date getEnd() {
+            return end;
+        }
+
+        public int getRun() {
+            return run;
+        }
+
+        @Override
         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;
-            }
-        }
-    }
-    
+            return String.format("Run %d - START: %s (%d), END: %s (%d), duration: %d", run, start.toString(), start.getTime(), end.toString(), end.getTime(), end.getTime() - start.getTime());
+        }
+    }
+
     public static final class SvtBiasRunRange {
+
         private RunData run;
-        private SvtBiasMyaRanges ranges;
-        public SvtBiasRunRange(RunData run, SvtBiasMyaRanges ranges) {
+        private SvtBiasMyaRange range;
+
+        public SvtBiasRunRange(RunData run, SvtBiasMyaRange range) {
             setRun(run);
-            setRanges(ranges);
-        }
+            setRange(range);
+        }
+
         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 SvtBiasMyaRange getRange() {
+            return range;
+        }
+
+        public void setRange(SvtBiasMyaRange range) {
+            this.range = range;
+        }
+
+        @Override
         public String toString() {
-            StringBuffer sb  = new StringBuffer();
-            sb.append("\nRun " + run.toString() + ":");
-            for (SvtBiasMyaRange r : ranges) {
-                sb.append("\n" + r.toString());
-            }
-            return sb.toString();
-        }
-    }
-    
+//            StringBuffer sb = new StringBuffer();
+//            sb.append("\nRun " + run.toString() + ":");
+//            sb.append("\n" + range.toString());
+            return String.format("%s, range %s", run.toString(), range.toString());
+        }
+    }
 
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java	Mon Jul 27 16:18:54 2015
@@ -34,13 +34,15 @@
         
     }
     
-    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("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() {
+        DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("America/New_York"));
     }
 
     public SvtBiasMyaRanges findOverlappingRanges(Date date_start, Date date_end) {