Print

Print


Author: [log in to unmask]
Date: Wed Jun 10 18:09:38 2015
New Revision: 3136

Log:
Add functionality to build run ranges.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java

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	Wed Jun 10 18:09:38 2015
@@ -9,43 +9,63 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+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);
 
     
     public static void main(String[] args) {
         
-        SvtBiasMyaDumpReader dumpReader = new SvtBiasMyaDumpReader();
-        
-        for( int i=0; i<args.length; ++i) {
-            dumpReader.addEntries(readMyaDump(new File(args[i])));
-        }
-       System.out.println("Got " + dumpReader.getAllEntries().size() + " entries");
-       
-       dumpReader.buildRanges();
-       
-       dumpReader.printRanges();
+        SvtBiasMyaDumpReader dumpReader = new SvtBiasMyaDumpReader(args);
+        
+        dumpReader.printRanges();
       
         
     }
     
-    
-    
-    
-
-
-
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     private static final double BIASVALUEON = 178.0;
     private List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
-    private List<SvtBiasMyaRange> myaBiasOnRanges = new ArrayList<SvtBiasMyaRange>();
+    private SvtBiasMyaRanges biasRanges = new SvtBiasMyaRanges();
     
     public SvtBiasMyaDumpReader() {
-        // TODO Auto-generated constructor stub
-    }
-
+    }
+
+    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);
     }
@@ -54,18 +74,23 @@
         this.myaEntries.addAll(e);
     }
 
-    public List<SvtBiasMyaEntry> getAllEntries() {
+    public List<SvtBiasMyaEntry> getEntries() {
         return this.myaEntries;
     }
 
+    public SvtBiasMyaRanges getRanges() {
+        return this.biasRanges;
+    }
+
+    
     private void printRanges() {
-        for( SvtBiasMyaRange r : myaBiasOnRanges) {
-            System.out.println(r.toString());
+        for( SvtBiasMyaRange r : biasRanges) {
+            logger.info(r.toString());
         }
      }
     
     
-    private static List<SvtBiasMyaEntry> readMyaDump(File file) {
+    protected static List<SvtBiasMyaEntry> readMyaDump(File file) {
 
         List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>();
         try {
@@ -85,14 +110,12 @@
                     SvtBiasMyaEntry entry = new SvtBiasMyaEntry(file.getName(), date, value);
                     myaEntries.add(entry);
                 } catch (ParseException e) {
-                    // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             }
             br.close();
 
         } catch (IOException e) {
-            // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return myaEntries;
@@ -108,28 +131,28 @@
             
             if(eprev!=null) {
                 if(e.getDate().before(eprev.getDate())) {
-                    throw new RuntimeException("date list is not ordered.");
+                    throw new RuntimeException("date list is not ordered: " + eprev.toString() + " vs " + e.toString());
                 }
             }
             
             if( e.getValue() > BIASVALUEON) {
                 if (range==null) {
-                    System.out.println("BIAS ON: " + e.toString());
+                    logger.fine("BIAS ON: " + e.toString());
                     range = new SvtBiasMyaRange();
                     range.setStart(e);
                 } 
             } else {
                 //close it
                 if (range!=null) {
-                    System.out.println("BIAS TURNED OFF: " + e.toString());
-                    range.setEnd(eprev);
-                    this.myaBiasOnRanges.add(range);
+                    logger.fine("BIAS TURNED OFF: " + e.toString());
+                    range.setEnd(e);
+                    this.biasRanges.add(range);
                     range = null;
                 }
             }            
             eprev = e;
         }
-        System.out.println("Built " + this.myaBiasOnRanges.size() + " ranges");
+        logger.info("Built " + this.biasRanges.size() + " ranges");
         
     }
     
@@ -154,12 +177,49 @@
         }
     }
 
-   
-    
-    public static final class SvtBiasMyaRange {
+
+    
+    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 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;
         }
@@ -179,5 +239,35 @@
             return "START: " + start.toString() + "   END: " + end.toString();
         }
     }
+    
+    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();
+        }
+    }
+    
 
 }