Author: [log in to unmask] Date: Wed Jul 29 14:20:41 2015 New Revision: 3293 Log: lots of changes Modified: java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java Modified: java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/run/RunSpreadsheet.java Wed Jul 29 14:20:41 2015 @@ -187,14 +187,21 @@ run = parseRunNumber(this.record); try { startDate = RunSpreadsheet.parseStartDate(this.record); - } catch (ParseException e) { + } catch (ParseException e) { } try { endDate = RunSpreadsheet.parseEndDate(this.record); - } catch (ParseException e) { - } - } - + } catch (ParseException e) { + } + } + + public RunData(Date startDate, Date endDate, int run) { + this.startDate = startDate; + this.endDate = endDate; + this.run = run; + record = null; + } + public int getRun() { return run; } 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 Wed Jul 29 14:20:41 2015 @@ -5,14 +5,14 @@ import java.io.File; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; - import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; @@ -27,9 +27,8 @@ import org.hps.conditions.run.RunSpreadsheet.RunData; import org.hps.conditions.run.RunSpreadsheet.RunMap; import org.hps.conditions.svt.SvtBiasConstant.SvtBiasConstantCollection; -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.SvtBiasMyaDataReader.SvtBiasMyaRange; +import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasRunRange; import org.hps.util.BasicLogFormatter; import org.lcsim.util.aida.AIDA; import org.lcsim.util.log.LogUtil; @@ -100,7 +99,7 @@ * @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 GregorianCalendar(1999, 1, 1)).getTime())) { logger.fine("This run data is not valid: " + data.toString()); return false; } @@ -128,39 +127,22 @@ 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 + public static List<RunData> getRunListFromSpreadSheet(String path) { + // Load in CSV records from the exported run spreadsheet. + List<RunData> runList = new ArrayList<RunData>(); + + // find the run records (has converted dates and stuff) for these ranges + RunMap runmap = getRunMapFromSpreadSheet(path); + + List<Integer> runNums = new ArrayList<Integer>(runmap.keySet()); + Collections.sort(runNums); + for (Integer runNum : runNums) { + RunData data = runmap.get(runNum); 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; + runList.add(data); + } + } + return runList; } /** @@ -172,10 +154,10 @@ public static void main(String[] args) { Options options = new Options(); - options.addOption(new Option("c", true, "CVS run file")); + options.addOption(new Option("c", true, "CSV 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("t", false, "use run table format (from crawler)")); + options.addOption(new Option("d", false, "discard first line of MYA data (for myaData output)")); options.addOption(new Option("g", false, "Actually load stuff into DB")); options.addOption(new Option("s", false, "Show plots")); @@ -187,34 +169,33 @@ 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")); // Load in CSV records from the exported run spreadsheet. - RunMap runmap = getRunMapFromSpreadSheet(cl.getOptionValue("c")); + List<RunData> runList = null; + if (cl.hasOption("t")) { + runList = SvtBiasMyaDataReader.readRunTable(new File(cl.getOptionValue("c"))); + } else { + runList = getRunListFromSpreadSheet(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"))); -// } + List<SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(cl.getOptionValue("m")), 178.0, 2000, cl.hasOption("d")); + logger.info("Got " + ranges.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 = SvtBiasMyaDataReader.findOverlappingRanges(runList, ranges); // fill graphs if (cl.hasOption("s")) { - for (SvtBiasRunRange r : biasRunRanges) { + for (SvtBiasMyaDataReader.SvtBiasRunRange r : biasRunRanges) { logger.info(r.toString()); if (r.getRun().getRun() > 5600) {//9999999999999.0) { //if(dpsRuns.size()/4.0<500) {//9999999999999.0) { @@ -224,10 +205,10 @@ 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(dpsBiasRuns, br.getStartDate().getTime(), 0.0); + addPoint(dpsBiasRuns, br.getStartDate().getTime(), 0.5); + addPoint(dpsBiasRuns, br.getEndDate().getTime(), 0.5); + addPoint(dpsBiasRuns, br.getEndDate().getTime(), 0.0); } } @@ -305,7 +286,7 @@ final SvtBiasConstant constant = new SvtBiasConstant(); constant.setFieldValue("start", biasRange.getStartDate()); constant.setFieldValue("end", biasRange.getEndDate()); - constant.setFieldValue("value", biasRange.getStart().getValue()); + constant.setFieldValue("value", biasRange.getValue()); collection.add(constant); logger.info(condition.toString()); } Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java Wed Jul 29 14:20:41 2015 @@ -5,7 +5,6 @@ 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; @@ -26,6 +25,7 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; +import org.hps.conditions.run.RunSpreadsheet.RunData; public class SvtBiasMyaDataReader { @@ -56,49 +56,44 @@ 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<SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(cl.getArgs()[0]), 178.0, 2000, true); + List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(cl.getArgs()[1])); + List<SvtBiasRunRange> runRanges = findOverlappingRanges(runData, ranges); + + for (SvtBiasRunRange runRange : runRanges) { + System.out.println(runRange); + } + + } + + public static List<SvtBiasRunRange> findOverlappingRanges(List<RunData> runList, List<SvtBiasMyaRange> ranges) { 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())) { + for (RunData run : runList) { + SvtBiasRunRange runRange = new SvtBiasRunRange(run); + while (nextRange.getEndDate().before(run.getStartDate()) && rangesIter.hasNext()) { nextRange = rangesIter.next(); + } + while (nextRange.getStartDate().before(run.getEndDate())) { + runRange.addRange(nextRange); + if (nextRange.getEndDate().after(run.getEndDate())) { + break; + } if (!rangesIter.hasNext()) { - break runLoop; - } - } - while (nextRange.getStart().before(data.getEnd())) { - runRanges.add(new SvtBiasRunRange(data, nextRange)); + break; + } 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(); + } + if (!runRange.getRanges().isEmpty()) { + runRanges.add(runRange); + } + } + return runRanges; } // private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -106,61 +101,55 @@ public SvtBiasMyaDataReader(double biasValueOn, int endMargin) { } - public static List<SvtBiasMyaRange> readMyaData(File file, double biasValueOn, int endMargin) { + public static List<SvtBiasMyaRange> readMyaData(File file, double biasValueOn, int endMargin, boolean discardHeader) { 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()); - + if (discardHeader) { + System.out.println(br.readLine()); //discard the first line + } SvtBiasMyaRange currentRange = null; while ((line = br.readLine()) != null) { - //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); + } + + 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; //assume it's bad + } else { + values[i - 2] = Double.parseDouble(arr[i]); } - - 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()); } - 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; + } else { + if (currentRange != null) { + currentRange.setEndDate(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(); } } br.close(); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); + } catch (ParseException e) { + throw new RuntimeException(e); } return ranges; @@ -210,29 +199,20 @@ 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() { + public Date getEndDate() { return end; } - public void setEnd(Date end) { + public void setEndDate(Date end) { this.end = end; } - public Date getStart() { + public Date getStartDate() { return start; } @@ -242,72 +222,56 @@ } 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; + return !date.before(getStartDate()) && !date.after(getEndDate()); + } + + Object getValue() { + return bias; + } + } + + public static final class SvtBiasRunRange { + + private RunData run; + private final List<SvtBiasMyaRange> ranges = new ArrayList<SvtBiasMyaRange>(); + + public SvtBiasRunRange(RunData run) { + setRun(run); + } + + public RunData getRun() { + return run; + } + + public void setRun(RunData run) { this.run = run; } - public Date getStart() { - return start; - } - - public Date getEnd() { - return end; - } - - public int getRun() { - return run; + public List<SvtBiasMyaRange> getRanges() { + return ranges; + } + + public void addRange(SvtBiasMyaRange range) { + ranges.add(range); + } + + public boolean includes(Date date) { + for (SvtBiasMyaRange r : ranges) { + if (date.after(r.getStartDate()) && date.before(r.getEndDate())) { + return true; + } + } + return false; } @Override public String toString() { - 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 SvtBiasMyaRange range; - - public SvtBiasRunRange(RunData run, SvtBiasMyaRange range) { - setRun(run); - setRange(range); - } - - public RunData getRun() { - return run; - } - - public void setRun(RunData run) { - this.run = run; - } - - 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() + ":"); -// sb.append("\n" + range.toString()); - return String.format("%s, range %s", run.toString(), range.toString()); + StringBuilder sb = new StringBuilder(); + sb.append("\nRun ").append(run.toString()).append(":"); + for (SvtBiasMyaRange range : ranges) { + sb.append("\n").append(range.toString()); + } + return sb.toString(); } } Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java ============================================================================= --- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java (original) +++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java Wed Jul 29 14:20:41 2015 @@ -6,7 +6,7 @@ import hep.aida.IPlotter; import hep.aida.IPlotterFactory; import hep.aida.ITree; - +import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; @@ -16,16 +16,18 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; - import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection; import org.hps.conditions.database.DatabaseConditionsManager; +import org.hps.conditions.run.RunSpreadsheet; import org.hps.conditions.run.RunSpreadsheet.RunMap; import org.hps.conditions.svt.SvtBiasConditionsLoader; import org.hps.conditions.svt.SvtBiasConstant; import org.hps.conditions.svt.SvtBiasConstant.SvtBiasConstantCollection; -import org.hps.conditions.svt.SvtBiasMyaDumpReader; +import org.hps.conditions.svt.SvtBiasMyaDataReader; +import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasMyaRange; +import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasRunRange; +import static org.hps.conditions.svt.SvtBiasMyaDataReader.findOverlappingRanges; import org.hps.conditions.svt.SvtTimingConstants; -import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasRunRange; import org.hps.recon.ecal.triggerbank.AbstractIntData; import org.hps.recon.ecal.triggerbank.HeadBankData; import org.hps.record.epics.EpicsData; @@ -39,7 +41,6 @@ import org.lcsim.util.aida.AIDA; import org.lcsim.util.log.LogUtil; - /** * @author Per Hansson Adrian <[log in to unmask]> * @@ -48,6 +49,7 @@ // Logger Logger logger = LogUtil.create(getName(), new BasicLogFormatter(), Level.INFO); + static { hep.aida.jfree.AnalysisFactory.register(); } @@ -61,14 +63,20 @@ IPlotter plotter3; IPlotter plotter4; private boolean showPlots = false; + private boolean useRunTableFormat = false; + private boolean discardMyaDataHeader = false; + private boolean debug = false; List<HpsSiSensor> sensors; private Map<HpsSiSensor, IHistogram1D> hists_rawadc; private Map<HpsSiSensor, IHistogram1D> hists_rawadcnoise; private Map<HpsSiSensor, IHistogram1D> hists_rawadcnoiseON; private Map<HpsSiSensor, IHistogram1D> hists_rawadcnoiseOFF; + private final Map<HpsSiSensor, IHistogram1D> hists_hitCounts = new HashMap<HpsSiSensor, IHistogram1D>(); + private final Map<HpsSiSensor, IHistogram1D> hists_hitCountsON = new HashMap<HpsSiSensor, IHistogram1D>(); + private final Map<HpsSiSensor, IHistogram1D> hists_hitCountsOFF = new HashMap<HpsSiSensor, IHistogram1D>(); private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; - private String triggerBankCollectionName ="TriggerBank"; + private String triggerBankCollectionName = "TriggerBank"; private static final String subdetectorName = "Tracker"; List<SvtBiasRunRange> runRanges; SvtBiasRunRange runRange = null; @@ -79,16 +87,13 @@ private String fileName = "biasoutput.txt"; private int eventCountHvOff = 0; private String runSpreadSheetPath; - private String myaDumpPath; - private double epicsBiasValue = -1; + private String myaDumpPath; + private double epicsBiasValue = -1; private boolean hvOnEpics = false; private boolean hvOn = false; private EpicsData epicsData = null; private int eventCountEpicsDisagree = 0; SvtBiasConstantCollection svtBiasConstants = null; - - - public void setMyaDumpPath(String myaDumpPath) { this.myaDumpPath = myaDumpPath; @@ -102,31 +107,35 @@ this.fileName = fileName; } - - public void setShowPlots(boolean showPlots) { this.showPlots = showPlots; } - + public void setUseRunTableFormat(boolean useRunTableFormat) { + this.useRunTableFormat = useRunTableFormat; + } + + public void setDiscardMyaDataHeader(boolean discardMyaDataHeader) { + this.discardMyaDataHeader = discardMyaDataHeader; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + @Override protected void detectorChanged(Detector detector) { - - + ConditionsRecordCollection col_svt_bias = DatabaseConditionsManager.getInstance().findConditionsRecords("svt_bias"); - if(col_svt_bias==null) { + if (col_svt_bias == null) { logger.info("svt_bias name collection wasn't found"); } ConditionsRecordCollection col_svt_bias_constants = DatabaseConditionsManager.getInstance().findConditionsRecords("svt_bias_constants"); - if(col_svt_bias_constants==null) { + if (col_svt_bias_constants == null) { logger.info("col_svt_bias_constants name collection wasn't found"); } - - - - svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class , "svt_bias").getCachedData(); - - + +// svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class, "svt_bias").getCachedData(); try { fWriter = new FileWriter(fileName); } catch (IOException e) { @@ -134,9 +143,6 @@ } pWriter = new PrintWriter(fWriter); - - - tree = IAnalysisFactory.create().createTreeFactory().create(); tree.cd(""); histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree); @@ -145,7 +151,7 @@ hists_rawadcnoise = new HashMap<HpsSiSensor, IHistogram1D>(); hists_rawadcnoiseON = new HashMap<HpsSiSensor, IHistogram1D>(); hists_rawadcnoiseOFF = new HashMap<HpsSiSensor, IHistogram1D>(); - + sensors = detector.getSubdetector(subdetectorName).getDetectorElement().findDescendants(HpsSiSensor.class); plotter1 = plotterFactory.create("Pedestal subtracted zero Sample ADC"); @@ -167,31 +173,38 @@ plotter3.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadcnoiseON.get(sensor)); hists_rawadcnoiseOFF.put(sensor, aida.histogram1D(sensor.getName() + " raw adc - ped maxSample>4 OFF", 100, -1000.0, 1000.0)); plotter4.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadcnoiseOFF.get(sensor)); - } - - if(showPlots) { + hists_hitCounts.put(sensor, aida.histogram1D(sensor.getName() + " hit count", 100, 0, 100)); + hists_hitCountsON.put(sensor, aida.histogram1D(sensor.getName() + " hit count ON", 100, 0, 100)); + hists_hitCountsOFF.put(sensor, aida.histogram1D(sensor.getName() + " hit count OFF", 100, 0, 100)); + } + + if (showPlots) { plotter1.show(); plotter2.show(); plotter3.show(); plotter4.show(); } - - RunMap runmap = SvtBiasConditionsLoader.getRunMapFromSpreadSheet(runSpreadSheetPath); - SvtBiasMyaDumpReader biasDumpReader = new SvtBiasMyaDumpReader(myaDumpPath); + List<RunSpreadsheet.RunData> runmap; + if (useRunTableFormat) { + runmap = SvtBiasMyaDataReader.readRunTable(new File(runSpreadSheetPath)); + } else { + runmap = SvtBiasConditionsLoader.getRunListFromSpreadSheet(runSpreadSheetPath); + } + List<SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(myaDumpPath), 178.0, 2000, discardMyaDataHeader); + //SvtBiasConditionsLoader.setTimeOffset(Calendar.) - runRanges = SvtBiasConditionsLoader.getBiasRunRanges(runmap, biasDumpReader); + runRanges = SvtBiasMyaDataReader.findOverlappingRanges(runmap, ranges); logger.info("Print all " + runRanges.size() + " bias run ranges:"); - for(SvtBiasRunRange r : runRanges) { - logger.info(r.toString()); + for (SvtBiasRunRange r : runRanges) { + if (debug) { + logger.info(r.toString()); + } pWriter.println(r.toString()); } - - - } - - + } + private Date getEventTimeStamp(EventHeader event) { List<GenericObject> intDataCollection = event.get(GenericObject.class, triggerBankCollectionName); for (GenericObject data : intDataCollection) { @@ -199,140 +212,155 @@ Date date = HeadBankData.getDate(data); if (date != null) { return date; - } + } } } return null; } - - + @Override public void process(EventHeader event) { - - + // Read EPICS data if available epicsData = EpicsData.read(event); - - if(epicsData!=null) { + + if (epicsData != null) { logger.info(epicsData.toString()); - if(epicsData.getUsedNames().contains("SVT:bias:top:0:v_sens")) { - + if (epicsData.getUsedNames().contains("SVT:bias:top:0:v_sens")) { + epicsBiasValue = epicsData.getValue("SVT:bias:top:0:v_sens"); logger.info("epicsBiasValue = " + Double.toString(epicsBiasValue)); - - if(epicsBiasValue>SvtBiasMyaDumpReader.BIASVALUEON) { + + if (epicsBiasValue > 178.0) { hvOnEpics = true; } - + } } else { logger.fine("no epics information in this event"); } - - - + // Read the timestamp for the event // It comes in on block level so not every event has it, use the latest one throughout a block - Date newEventDate = getEventTimeStamp(event); - if(newEventDate!=null) { + if (newEventDate != null) { + if (eventDate == null || !eventDate.equals(newEventDate)) { + System.out.format("event %d with new timestamp %s\n", event.getEventNumber(), newEventDate.toString()); + } eventDate = newEventDate; } - + // only do this analysis where there is a date availabe. - - if(eventDate!=null) { - - logger.info("eventDate " + eventDate.toString()); - + if (eventDate != null) { + if (debug) { + logger.info("eventDate " + eventDate.toString()); + } + eventCount++; - - + // check what the DB has - if(svtBiasConstants != null) { + if (svtBiasConstants != null) { logger.info("there are " + svtBiasConstants.size() + " constants to search"); - for(SvtBiasConstant constant : svtBiasConstants) { + for (SvtBiasConstant constant : svtBiasConstants) { logger.info("start " + constant.getStart().toString() + " end " + constant.getEnd() + " value " + constant.getValue()); } - - + SvtBiasConstant constant = svtBiasConstants.find(eventDate); - - logger.info(constant==null?"No constant found!":("Found constant " + "start " + constant.getStart().toString() + " end " + constant.getEnd() + " value " + constant.getValue())); - - } - - - - if(runRange==null) { - for(SvtBiasRunRange r : runRanges) { - if (r.getRun().getRun()==event.getRunNumber()) { + + logger.info(constant == null ? "No constant found!" : ("Found constant " + "start " + constant.getStart().toString() + " end " + constant.getEnd() + " value " + constant.getValue())); + + } + + if (runRange == null) { + for (SvtBiasRunRange r : runRanges) { + if (r.getRun().getRun() == event.getRunNumber()) { runRange = r; } } } - - hvOn = runRange.getRanges().includes(eventDate); - + + hvOn = runRange.includes(eventDate); + // print the cases where epics and run range do not agree - if(hvOn!=hvOnEpics && epicsBiasValue>0.) { - logger.warning("hvOn is " + (hvOn?"ON":"OFF") + " hvOnEpics " + (hvOnEpics?"ON":"OFF") + " for Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn?"YES":"NO") + " hvOnEpics " + (hvOnEpics?"YES":"NO")); - pWriter.println("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn?"YES":"NO")); + if (hvOn != hvOnEpics && epicsBiasValue > 0.) { + logger.warning("hvOn is " + (hvOn ? "ON" : "OFF") + " hvOnEpics " + (hvOnEpics ? "ON" : "OFF") + " for Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn ? "YES" : "NO") + " hvOnEpics " + (hvOnEpics ? "YES" : "NO")); + pWriter.println("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn ? "YES" : "NO")); eventCountEpicsDisagree++; } - + // print the cases where the HV is OFF - if(!hvOn) { - logger.info("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn?"YES":"NO")+ " hvOnEpics " + (hvOnEpics?"YES":"NO")); - pWriter.println("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn?"YES":"NO")+ " hvOnEpics " + (hvOnEpics?"YES":"NO")); + if (!hvOn) { + if (debug) { + logger.info("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn ? "YES" : "NO") + " hvOnEpics " + (hvOnEpics ? "YES" : "NO")); + } + pWriter.println("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn ? "YES" : "NO") + " hvOnEpics " + (hvOnEpics ? "YES" : "NO")); eventCountHvOff++; } if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { + Map<HpsSiSensor, Integer> hitCountMap = new HashMap<HpsSiSensor, Integer>(); + // Get RawTrackerHit collection from event. List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); - + for (RawTrackerHit hit : rawTrackerHits) { HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement(); + Integer count = hitCountMap.get(sensor); + if (count == null) { + count = 0; + } + hitCountMap.put(sensor, count + 1); + int strip = hit.getIdentifierFieldValue("strip"); double pedestal = sensor.getPedestal(strip, 0); hists_rawadc.get(sensor).fill(hit.getADCValues()[0] - pedestal); int maxSample = 0; double maxSampleValue = 0; - for(int s=0;s<6;++s) { - if(((double)hit.getADCValues()[s] - pedestal)>maxSampleValue) { + for (int s = 0; s < 6; ++s) { + if (((double) hit.getADCValues()[s] - pedestal) > maxSampleValue) { maxSample = s; - maxSampleValue = ((double) hit.getADCValues()[s]) - pedestal; + maxSampleValue = ((double) hit.getADCValues()[s]) - pedestal; } } - if(maxSample>=4) { + if (maxSample >= 4) { hists_rawadcnoise.get(sensor).fill(hit.getADCValues()[0] - pedestal); - if(hvOn) { + if (hvOn) { hists_rawadcnoiseON.get(sensor).fill(hit.getADCValues()[0] - pedestal); } else { hists_rawadcnoiseOFF.get(sensor).fill(hit.getADCValues()[0] - pedestal); } } } + + for (HpsSiSensor sensor : sensors) { + Integer count = hitCountMap.get(sensor); + if (count == null) { + count = 0; + } + hists_hitCounts.get(sensor).fill(count); + if (hvOn) { + hists_hitCountsON.get(sensor).fill(count); + } else { + hists_hitCountsOFF.get(sensor).fill(count); + } + } } } } @Override public void endOfData() { - + logger.info("eventCount " + Integer.toString(eventCount) + " eventCountHvOff " + Integer.toString(eventCountHvOff) + " eventCountEpicsDisagree " + Integer.toString(eventCountEpicsDisagree)); pWriter.println("eventCount " + Integer.toString(eventCount) + " eventCountHvOff " + Integer.toString(eventCountHvOff) + " eventCountEpicsDisagree " + Integer.toString(eventCountEpicsDisagree)); - + try { pWriter.close(); fWriter.close(); - } catch(IOException ex) { - logger.log(Level.SEVERE, null, ex); - } - - } - - - + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + } + + } + }