Print

Print


Author: [log in to unmask]
Date: Thu Jun 18 12:38:24 2015
New Revision: 3156

Log:
Add useful functions to check for ranges and to check these in a driver.

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	Thu Jun 18 12:38:24 2015
@@ -106,7 +106,7 @@
      */
     private static boolean isValid(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());
+            logger.fine("This run data is not valid: " + data.toString());
             return false;
         } 
         if (data.getStartDate().after(data.getEndDate())) {
@@ -118,62 +118,30 @@
     //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(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);
-        }
-        
- 
-        // Setup plots
-        setupPlots(cl.hasOption("s")?true:false);
-
-        
+    public static RunMap getRunMapFromSpreadSheet(String path) {
         // 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(RunRange range : ranges) logger.info(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);
         logger.info("Found " + runmap.size() + " runs in the run map.");
-        
-        
-        
-        // 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
-        
+        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.info("Processing " + run + " " + data.toString());
+            logger.fine("Processing " + run + " " + data.toString());
             
             //check that data is ok
             if (isValid(data)) {
@@ -197,6 +165,96 @@
 
             }
         }
+        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);
+        }
+        
+       
+        
+ 
+        // 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);
+        
+        RunMap runmap = getRunMapFromSpreadSheet(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.info(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.");
+        
+        
+        
+        // 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);
+        
+//        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.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
+//                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
@@ -229,6 +287,8 @@
         
     }
     
+    
+
     private final static SvtBiasConstantCollection findCollection(final List<SvtBiasConstantCollection> list, Date date) {
         for( SvtBiasConstantCollection collection : list) {
             if(collection.find(date) != null) {

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	Thu Jun 18 12:38:24 2015
@@ -9,6 +9,7 @@
 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;
 
@@ -33,6 +34,7 @@
     }
     
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private static final TimeZone timeZone = TimeZone.getTimeZone("EST");
     private static final double BIASVALUEON = 178.0;
     private List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
     private SvtBiasMyaRanges biasRanges = new SvtBiasMyaRanges();
@@ -105,6 +107,7 @@
                     if(arr.length<3) {
                         throw new ParseException("this line is not correct.",0);
                     }
+                    DATE_FORMAT.setTimeZone(timeZone);
                     Date date = DATE_FORMAT.parse(arr[0] + " " + arr[1]);
                     double value = Double.parseDouble(arr[2]);
                     SvtBiasMyaEntry entry = new SvtBiasMyaEntry(file.getName(), date, value);
@@ -173,7 +176,7 @@
             return this.date;
         }
         public String toString() {
-            return name + " " + date.toString() + " value " + value;
+            return name + " " + date.toString() + " (epoch " + Long.toString(date.getTime()) + ")" + " value " + value;
         }
     }
 
@@ -200,6 +203,14 @@
             }
             return sb.toString();
         }
+        
+        public boolean includes(Date date) {
+            for(SvtBiasMyaRange r : this) {
+                if(r.includes(date)) return true;
+            }
+            return false;
+        }
+        
     }
     
     public static class SvtBiasMyaRange {
@@ -238,6 +249,13 @@
         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 {