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(); + } + } + }