Print

Print


Author: [log in to unmask]
Date: Thu Jul 30 18:32:49 2015
New Revision: 3313

Log:
motor reader

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtMotorMyaDataReader.java
      - copied, changed from r3310, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java
Modified:
    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/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	Thu Jul 30 18:32:49 2015
@@ -16,12 +16,6 @@
 import java.util.TimeZone;
 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;
-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;
@@ -31,34 +25,19 @@
 
     public static void main(String[] args) {
 
-        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) {
+        if (args.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, true);
-
-        List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(cl.getArgs()[1]));
+        List<SvtBiasMyaRange> ranges = SvtBiasMyaDataReader.readMyaData(new File(args[0]), 178.0, 2000, true);
+
+        List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(args[1]));
 
         List<SvtBiasRunRange> runRanges = findOverlappingRanges(runData, ranges);
 
@@ -94,11 +73,6 @@
             }
         }
         return runRanges;
-    }
-
-//    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    //private static final TimeZone timeZone = TimeZone.getTimeZone("EST");
-    public SvtBiasMyaDataReader(double biasValueOn, int endMargin) {
     }
 
     public static List<SvtBiasMyaRange> readMyaData(File file, double biasValueOn, int endMargin, boolean discardHeader) {
@@ -110,7 +84,7 @@
             BufferedReader br = new BufferedReader(new FileReader(file));
             String line;
             if (discardHeader) {
-                System.out.println(br.readLine()); //discard the first line
+                System.out.println("myaData header: " + br.readLine()); //discard the first line
             }
             SvtBiasMyaRange currentRange = null;
             while ((line = br.readLine()) != null) {

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtMotorMyaDataReader.java (from r3310, 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/SvtMotorMyaDataReader.java	Thu Jul 30 18:32:49 2015
@@ -2,80 +2,40 @@
 
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 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.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;
 import org.hps.conditions.run.RunSpreadsheet.RunData;
 
-public class SvtBiasMyaDataReader {
+public class SvtMotorMyaDataReader {
 
     public static void main(String[] args) {
-
-        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) {
+        if (args.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, true);
-
-        List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(cl.getArgs()[1]));
-
-        List<SvtBiasRunRange> runRanges = findOverlappingRanges(runData, ranges);
-
-        for (SvtBiasRunRange runRange : runRanges) {
+        List<SvtPositionMyaRange> ranges = SvtMotorMyaDataReader.readMyaData(new File(args[0]), 1000, 10000);
+        List<RunData> runData = SvtBiasMyaDataReader.readRunTable(new File(args[1]));
+        List<SvtPositionRunRange> runRanges = findOverlappingRanges(runData, ranges);
+        for (SvtPositionRunRange runRange : runRanges) {
             System.out.println(runRange);
         }
-
     }
 
-    public static List<SvtBiasRunRange> findOverlappingRanges(List<RunData> runList, List<SvtBiasMyaRange> ranges) {
-        List<SvtBiasRunRange> runRanges = new ArrayList<SvtBiasRunRange>();
+    public static List<SvtPositionRunRange> findOverlappingRanges(List<RunData> runList, List<SvtPositionMyaRange> ranges) {
+        List<SvtPositionRunRange> runRanges = new ArrayList<SvtPositionRunRange>();
 
-        Iterator<SvtBiasMyaRange> rangesIter = ranges.iterator();
-        SvtBiasMyaRange nextRange = rangesIter.next();
+        Iterator<SvtPositionMyaRange> rangesIter = ranges.iterator();
+        SvtPositionMyaRange nextRange = rangesIter.next();
 
         for (RunData run : runList) {
-            SvtBiasRunRange runRange = new SvtBiasRunRange(run);
+            SvtPositionRunRange runRange = new SvtPositionRunRange(run);
             while (nextRange.getEndDate().before(run.getStartDate()) && rangesIter.hasNext()) {
                 nextRange = rangesIter.next();
             }
@@ -96,53 +56,39 @@
         return runRanges;
     }
 
-//    private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    //private static final TimeZone timeZone = TimeZone.getTimeZone("EST");
-    public SvtBiasMyaDataReader(double biasValueOn, int endMargin) {
-    }
-
-    public static List<SvtBiasMyaRange> readMyaData(File file, double biasValueOn, int endMargin, boolean discardHeader) {
+    public static List<SvtPositionMyaRange> readMyaData(File file, int endMargin, double minDwellTime) {
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
 
-        List<SvtBiasMyaRange> ranges = new ArrayList<SvtBiasMyaRange>();
+        List<SvtPositionMyaRange> ranges = new ArrayList<SvtPositionMyaRange>();
         try {
             BufferedReader br = new BufferedReader(new FileReader(file));
             String line;
-            if (discardHeader) {
-                System.out.println(br.readLine()); //discard the first line
-            }
-            SvtBiasMyaRange currentRange = null;
+            System.out.println("myaData header: " + br.readLine()); //discard the first line
+            SvtPositionMyaRange currentRange = null;
+            Date lastDate = null;
             while ((line = br.readLine()) != null) {
                 String arr[] = line.split(" +");
 
-                if (arr.length < 3) {
+                if (arr.length != 4) {
                     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
+                Double[] values = new Double[2];
+                for (int i = 0; i < 2; i++) {
+                    if (arr[i + 2].equals("<undefined>")) {
+                        values[i] = 0.0; //if no data, assume retracted
                     } else {
-                        values[i - 2] = Double.parseDouble(arr[i]);
+                        values[i] = Double.parseDouble(arr[i + 2]);
                     }
                 }
-                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.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());
-                    }
+                if (lastDate != null && currentRange != null && date.getTime() - lastDate.getTime() > minDwellTime) {
+                    currentRange.setEndDate(new Date(date.getTime() - endMargin));
+//                    System.out.format("motors stopped:\t %s\n", currentRange.toString());
+                    ranges.add(currentRange);
                 }
+                currentRange = new SvtPositionMyaRange(date, motorToAngleTop(values[0]), motorToAngleBottom(values[1]));
+                lastDate = date;
             }
             br.close();
 
@@ -155,53 +101,24 @@
         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));
-            }
-        }
-
-        return data;
+    private static double motorToAngleTop(double motor) {
+        return (17.821 - motor) / 832.714;
     }
 
-    public static class SvtBiasMyaRange {
+    private static double motorToAngleBottom(double motor) {
+        return (17.397 - motor) / 832.714;
+    }
 
-        private Date start;
+    public static class SvtPositionMyaRange {
+
+        private final Date start;
         private Date end;
-        private double bias;
+        private final double top, bottom;
 
-        public SvtBiasMyaRange() {
-        }
-
-        public SvtBiasMyaRange(Date start, double bias) {
+        public SvtPositionMyaRange(Date start, double top, double bottom) {
             this.start = start;
-            this.bias = bias;
+            this.top = top;
+            this.bottom = bottom;
         }
 
         public Date getEndDate() {
@@ -218,24 +135,28 @@
 
         @Override
         public String toString() {
-            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());
+            return String.format("START: %s (%d), END: %s (%d), top: %f, bottom: %f, duration: %d", start.toString(), start.getTime(), end.toString(), end.getTime(), top, bottom, end.getTime() - start.getTime());
         }
 
         public boolean includes(Date date) {
             return !date.before(getStartDate()) && !date.after(getEndDate());
         }
 
-        Object getValue() {
-            return bias;
+        double getTop() {
+            return top;
+        }
+
+        double getBottom() {
+            return bottom;
         }
     }
 
-    public static final class SvtBiasRunRange {
+    public static final class SvtPositionRunRange {
 
         private RunData run;
-        private final List<SvtBiasMyaRange> ranges = new ArrayList<SvtBiasMyaRange>();
+        private final List<SvtPositionMyaRange> ranges = new ArrayList<SvtPositionMyaRange>();
 
-        public SvtBiasRunRange(RunData run) {
+        public SvtPositionRunRange(RunData run) {
             setRun(run);
         }
 
@@ -247,16 +168,16 @@
             this.run = run;
         }
 
-        public List<SvtBiasMyaRange> getRanges() {
+        public List<SvtPositionMyaRange> getRanges() {
             return ranges;
         }
 
-        public void addRange(SvtBiasMyaRange range) {
+        public void addRange(SvtPositionMyaRange range) {
             ranges.add(range);
         }
 
         public boolean includes(Date date) {
-            for (SvtBiasMyaRange r : ranges) {
+            for (SvtPositionMyaRange r : ranges) {
                 if (date.after(r.getStartDate()) && date.before(r.getEndDate())) {
                     return true;
                 }
@@ -268,7 +189,7 @@
         public String toString() {
             StringBuilder sb = new StringBuilder();
             sb.append("\nRun ").append(run.toString()).append(":");
-            for (SvtBiasMyaRange range : ranges) {
+            for (SvtPositionMyaRange 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	Thu Jul 30 18:32:49 2015
@@ -2,6 +2,7 @@
 
 import hep.aida.IAnalysisFactory;
 import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
 import hep.aida.IHistogramFactory;
 import hep.aida.IPlotter;
 import hep.aida.IPlotterFactory;
@@ -19,15 +20,12 @@
 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.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.recon.ecal.triggerbank.AbstractIntData;
 import org.hps.recon.ecal.triggerbank.HeadBankData;
 import org.hps.record.epics.EpicsData;
@@ -66,6 +64,9 @@
     private boolean useRunTableFormat = false;
     private boolean discardMyaDataHeader = false;
     private boolean debug = false;
+    private boolean dropSmallHitEvents = true;
+    private double eventNumRange = 1e6;
+    private int timeRange = 200;
 
     List<HpsSiSensor> sensors;
     private Map<HpsSiSensor, IHistogram1D> hists_rawadc;
@@ -75,11 +76,19 @@
     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 IHistogram1D allHitCount;
+    private IHistogram1D allHitCountON;
+    private IHistogram1D allHitCountOFF;
+    private IHistogram2D allHitCountVsNum;
+    private IHistogram2D numVsTime;
+    private IHistogram2D allHitCountVsTime;
+    private IHistogram2D biasVsTime;
+    private final String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+    private final String triggerBankCollectionName = "TriggerBank";
     private static final String subdetectorName = "Tracker";
     List<SvtBiasRunRange> runRanges;
     SvtBiasRunRange runRange = null;
+    private Date firstDate = null;
     private Date eventDate = null;
     private int eventCount = 0;
     FileWriter fWriter;
@@ -91,6 +100,7 @@
     private double epicsBiasValue = -1;
     private boolean hvOnEpics = false;
     private boolean hvOn = false;
+    private boolean hvOnConditions = false;
     private EpicsData epicsData = null;
     private int eventCountEpicsDisagree = 0;
     SvtBiasConstantCollection svtBiasConstants = null;
@@ -123,6 +133,18 @@
         this.debug = debug;
     }
 
+    public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
+        this.dropSmallHitEvents = dropSmallHitEvents;
+    }
+
+    public void setEventNumRange(double eventNumRange) {
+        this.eventNumRange = eventNumRange;
+    }
+
+    public void setTimeRange(int timeRange) {
+        this.timeRange = timeRange;
+    }
+
     @Override
     protected void detectorChanged(Detector detector) {
 
@@ -135,7 +157,15 @@
             logger.info("col_svt_bias_constants name collection wasn't found");
         }
 
-//        svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class, "svt_bias").getCachedData();
+//                ConditionsRecordCollection col_svt_align_constants = DatabaseConditionsManager.getInstance().findConditionsRecords("svt_alignments");
+//        if (col_svt_align_constants == null) {
+//            logger.info("svt_alignments collection wasn't found");
+//        }
+//        col_svt_align_constants.
+        svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class, "svt_bias_constants").getCachedData();
+        System.out.println(svtBiasConstants.size());
+
+//                timingConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtTimingConstants.SvtTimingConstantsCollection.class, "svt_timing_constants").getCachedData().get(0);
         try {
             fWriter = new FileWriter(fileName);
         } catch (IOException e) {
@@ -162,6 +192,12 @@
         plotter3.createRegions(6, 6);
         plotter4 = plotterFactory.create("Pedestal subtracted zero Sample ADC MaxSample>4 OFF");
         plotter4.createRegions(6, 6);
+
+        allHitCount = AIDA.defaultInstance().histogram1D("all hit count", 200, 0, 200);
+        allHitCountON = AIDA.defaultInstance().histogram1D("all hit count ON", 200, 0, 200);
+        allHitCountOFF = AIDA.defaultInstance().histogram1D("all hit count OFF", 200, 0, 200);
+        allHitCountVsTime = AIDA.defaultInstance().histogram2D("all hit count vs. elapsed time", timeRange, 0, timeRange, 200, 0, 200);
+        biasVsTime = AIDA.defaultInstance().histogram2D("bias vs. elapsed time", timeRange, 0, timeRange, 200, 0, 200);
 
         for (HpsSiSensor sensor : sensors) {
             AIDA aida = AIDA.defaultInstance();
@@ -221,6 +257,13 @@
     @Override
     public void process(EventHeader event) {
 
+        if (allHitCountVsNum == null) {
+            allHitCountVsNum = AIDA.defaultInstance().histogram2D("all hit count vs. event num", 1000, event.getEventNumber(), event.getEventNumber() + eventNumRange, 50, 0, 200);
+        }
+        if (numVsTime == null) {
+            numVsTime = AIDA.defaultInstance().histogram2D("event num vs. elapsed time", timeRange, 0, timeRange, 1000, event.getEventNumber(), event.getEventNumber() + eventNumRange);
+        }
+
         // Read EPICS data if available
         epicsData = EpicsData.read(event);
 
@@ -244,10 +287,31 @@
         // 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 (firstDate == null) {
+                firstDate = newEventDate;
+            }
+            hvOnConditions = svtBiasConstants.find(newEventDate) != null;
             if (eventDate == null || !eventDate.equals(newEventDate)) {
                 System.out.format("event %d with new timestamp %s\n", event.getEventNumber(), newEventDate.toString());
+                System.out.println("hvOn is " + (hvOn ? "ON" : "OFF") + " hvOnEpics " + (hvOnEpics ? "ON" : "OFF") + " hvOnConditions " + (hvOnConditions ? "ON" : "OFF") + " for Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + newEventDate.toString() + " epoch " + newEventDate.getTime());
+                // check what the DB has
+                if (svtBiasConstants != null) {
+                    logger.info("there are " + svtBiasConstants.size() + " constants to search");
+                    for (SvtBiasConstant constant : svtBiasConstants) {
+                        logger.info("start " + constant.getStart().toString() + " end " + constant.getEnd() + " value " + constant.getValue());
+                    }
+
+                    SvtBiasConstant constant = svtBiasConstants.find(newEventDate);
+
+                    logger.info(constant == null ? "No constant found!" : ("Found constant " + "start " + constant.getStart().toString() + " end " + constant.getEnd() + " value " + constant.getValue()));
+
+                }
             }
             eventDate = newEventDate;
+        }
+        if (eventDate != null) {
+            numVsTime.fill((eventDate.getTime() - firstDate.getTime()) / 1000, event.getEventNumber());
+            biasVsTime.fill((eventDate.getTime() - firstDate.getTime()) / 1000, epicsBiasValue);
         }
 
         // only do this analysis where there is a date availabe.
@@ -258,19 +322,6 @@
 
             eventCount++;
 
-            // check what the DB has
-            if (svtBiasConstants != null) {
-                logger.info("there are " + svtBiasConstants.size() + " constants to search");
-                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()) {
@@ -283,7 +334,9 @@
 
             // 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"));
+                if (debug) {
+                    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++;
             }
@@ -332,6 +385,20 @@
                     }
                 }
 
+                allHitCount.fill(rawTrackerHits.size());
+
+//                if (dropSmallHitEvents && SvtPlotUtils.countSmallHits(rawTrackerHits) > 3) {
+//                    return;
+//                }
+                if (hvOn) {
+                    allHitCountON.fill(rawTrackerHits.size());
+                } else {
+                    allHitCountOFF.fill(rawTrackerHits.size());
+                }
+                allHitCountVsNum.fill(event.getEventNumber(), rawTrackerHits.size());
+                if (eventDate != null) {
+                    allHitCountVsTime.fill((eventDate.getTime() - firstDate.getTime()) / 1000, rawTrackerHits.size());
+                }
                 for (HpsSiSensor sensor : sensors) {
                     Integer count = hitCountMap.get(sensor);
                     if (count == null) {