Print

Print


Author: [log in to unmask]
Date: Thu Jun 18 12:45:23 2015
New Revision: 3159

Log:
Check noise in bias on/off events

Added:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java

Added: 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	(added)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SampleZeroHVBiasChecker.java	Thu Jun 18 12:45:23 2015
@@ -0,0 +1,304 @@
+package org.hps.monitoring.drivers.svt;
+
+import hep.aida.IAnalysisFactory;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogramFactory;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterFactory;
+import hep.aida.ITree;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.conditions.run.RunSpreadsheet.RunMap;
+import org.hps.conditions.svt.SvtBiasConditionsLoader;
+import org.hps.conditions.svt.SvtBiasMyaDumpReader;
+import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasRunRange;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.log.LogUtil;
+import org.hps.monitoring.drivers.svt.SvtPlotUtils;
+import org.hps.recon.ecal.triggerbank.AbstractIntData;
+import org.hps.recon.ecal.triggerbank.HeadBankData;
+import org.hps.util.BasicLogFormatter;
+
+
+/**
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+public class SampleZeroHVBiasChecker extends Driver {
+
+    // Logger
+    Logger logger = LogUtil.create(getName(), new BasicLogFormatter(), Level.INFO);
+    static {
+        hep.aida.jfree.AnalysisFactory.register();
+    }
+
+    // Plotting
+    private static ITree tree;
+    IHistogramFactory histogramFactory;
+    IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
+
+    // Histogram maps
+    IPlotter plotter1;
+    IPlotter plotter2;
+    IPlotter plotter3;
+    IPlotter plotter4;
+    
+
+    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 String rawTrackerHitCollectionName = "SVTRawTrackerHits";
+    private String triggerBankCollectionName ="TriggerBank";
+    private String fitFile = null;
+    private boolean plotTimeSeries = false;
+    private static final String subdetectorName = "Tracker";
+    List<SvtBiasRunRange> runRanges;
+    SvtBiasRunRange runRange = null;
+    private int eventRefreshRate;
+    private int eventCount;
+    private Date eventDate = null;
+
+    public void setFitFile(String fitFile) {
+        this.fitFile = fitFile;
+    }
+
+    public void setPlotTimeSeries(boolean plotTimeSeries) {
+        this.plotTimeSeries = plotTimeSeries;
+    }
+
+    public void setEventRefreshRate(int eventRefreshRate) {
+        this.eventRefreshRate = eventRefreshRate;
+    }
+
+    @Override
+    protected void detectorChanged(Detector detector) {
+   
+	tree = IAnalysisFactory.create().createTreeFactory().create();
+        histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
+
+        hists_rawadc = new HashMap<HpsSiSensor, IHistogram1D>();
+        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");
+        plotter1.createRegions(6, 6);
+        plotter2 = plotterFactory.create("Pedestal subtracted zero Sample ADC MaxSample>4");
+        plotter2.createRegions(6, 6);
+        plotter3 = plotterFactory.create("Pedestal subtracted zero Sample ADC MaxSample>4 ON");
+        plotter3.createRegions(6, 6);
+        plotter4 = plotterFactory.create("Pedestal subtracted zero Sample ADC MaxSample>4 OFF");
+        plotter4.createRegions(6, 6);
+
+        for (HpsSiSensor sensor : sensors) {
+            hists_rawadc.put(sensor, histogramFactory.createHistogram1D(sensor.getName() + " raw adc - ped", 100, -1000.0, 5000.0));
+            plotter1.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadc.get(sensor));
+            hists_rawadcnoise.put(sensor, histogramFactory.createHistogram1D(sensor.getName() + " raw adc - ped maxSample>4", 100, -1000.0, 1000.0));
+            plotter2.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadcnoise.get(sensor));
+            hists_rawadcnoiseON.put(sensor, histogramFactory.createHistogram1D(sensor.getName() + " raw adc - ped maxSample>4 ON", 100, -1000.0, 1000.0));
+            plotter3.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadcnoiseON.get(sensor));
+            hists_rawadcnoiseOFF.put(sensor, histogramFactory.createHistogram1D(sensor.getName() + " raw adc - ped maxSample>4 OFF", 100, -1000.0, 1000.0));
+            plotter4.region(SvtPlotUtils.computePlotterRegion(sensor)).plot(hists_rawadcnoiseOFF.get(sensor));
+        }
+
+        plotter1.show();
+        plotter2.show();
+        plotter3.show();
+        plotter4.show();
+
+
+
+        RunMap runmap = SvtBiasConditionsLoader.getRunMapFromSpreadSheet("/Users/phansson/work/HPS/software/kepler2/hps-java-sandbox/HPS_Runs_2015-SVT_timing_guesses_for_Jeremy.csv");            
+        SvtBiasMyaDumpReader biasDumpReader = new SvtBiasMyaDumpReader("/Users/phansson/work/HPS/software/kepler2/hps-java-sandbox/biascrawling/svtbiasmon/SVT:bias:bot:20:v_sens.mya");
+        //SvtBiasConditionsLoader.setTimeOffset(Calendar.)
+        runRanges = SvtBiasConditionsLoader.getBiasRunRanges(runmap, biasDumpReader);
+        logger.info("Print all " + runRanges.size() + " bias run ranges:");
+        for(SvtBiasRunRange r : runRanges) {
+            logger.info(r.toString());
+        }
+
+
+        
+    }
+
+    
+    private Date getEventTimeStamp(EventHeader event) {
+        List<GenericObject> intDataCollection = event.get(GenericObject.class, triggerBankCollectionName);
+        for (GenericObject data : intDataCollection) {
+            if (AbstractIntData.getTag(data) == HeadBankData.BANK_TAG) {
+                Date date = HeadBankData.getDate(data);
+                if (date != null) {
+                    return date;
+                } 
+            }
+        }
+        return null;
+    }
+    
+    
+    @Override
+    public void process(EventHeader event) {
+        
+        
+        
+        if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) {
+            // Get RawTrackerHit collection from event.
+            List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName);
+            eventCount++;
+            if(runRange==null) {
+                for(SvtBiasRunRange r : runRanges) {
+                    if (r.getRun().getRun()==event.getRunNumber()) {
+                        runRange = r;
+                    }
+                }
+            }
+            for (RawTrackerHit hit : rawTrackerHits) {
+                HpsSiSensor sensor = (HpsSiSensor) hit.getDetectorElement();
+                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) {
+                        maxSample = s;
+                        maxSampleValue =  ((double) hit.getADCValues()[s]) - pedestal;
+                    }
+                  }
+                if(maxSample>=4) {
+                    hists_rawadcnoise.get(sensor).fill(hit.getADCValues()[0] - pedestal);
+                    
+                    Date newEventDate = getEventTimeStamp(event);
+                    if(newEventDate!=null) {
+                        eventDate = newEventDate;
+                    }
+                    if(eventDate!=null) {
+                        boolean hvOn = runRange.getRanges().includes(eventDate);
+                        logger.info("Run " + event.getRunNumber() + " Event " + event.getEventNumber() + " date " + eventDate.toString() + " epoch " + eventDate.getTime() + " hvOn " + (hvOn?"YES":"NO"));
+                        
+                        if(hvOn) {
+                            hists_rawadcnoiseON.get(sensor).fill(hit.getADCValues()[0] - pedestal);
+                        } else {
+                            hists_rawadcnoiseOFF.get(sensor).fill(hit.getADCValues()[0] - pedestal);
+                        }
+                    } else {
+                        logger.warning("No eventDatae for run " + event.getRunNumber() + " Event " + event.getEventNumber());
+                    }
+                }
+                    //hists_rawadc.get(sensor).fill(strip, hit.getADCValues()[0] - pedestal);
+
+                
+
+            }
+//            if (eventCount % eventRefreshRate == 0) {
+//                for (HpsSiSensor sensor : sensors) {
+//                    IHistogram2D hist = hists.get(sensor);
+////                    hist.
+//                }
+//            }
+
+        }
+    }
+
+//    private void getMean2D(IHistogram2D hist2D) {
+//        int nx = hist2D.xAxis().bins();
+//        int ny = hist2D.yAxis().bins();
+//        double[][] means = new double[nx][ny];
+//        for (int ix = 0; ix < nx; ix++) {
+//            for (int iy = 0; iy < ny; iy++) {
+//                means[ix][iy] = hist2D.binHeight(ix, iy) / hist2D.binEntries(ix, iy);
+//            }
+//        }
+//        hist2D.reset();
+//        for (int ix = 0; ix < nx; ix++) {
+//            for (int iy = 0; iy < ny; iy++) {
+//                double x = hist2D.xAxis().binCenter(ix);
+//                double y = hist2D.yAxis().binCenter(iy);
+//                hist2D.fill(x, y, means[ix][iy]);
+//            }
+//        }
+//
+//        IFitter fitter = AIDA.defaultInstance().analysisFactory().createFitFactory().createFitter("chi2");
+//
+//    }
+//
+//    IFitResult fitGaussian(IHistogram1D h1d, IFitter fitter, String range) {
+//        double[] init = {h1d.maxBinHeight(), h1d.mean(), h1d.rms()};
+//        IFitResult ifr = null;
+//        try {
+//            ifr = fitter.fit(h1d, "g", init, range);
+//        } catch (RuntimeException ex) {
+//            System.out.println(this.getClass().getSimpleName() + ":  caught exception in fitGaussian");
+//        }
+//        return ifr;
+////        double[] init = {20.0, 0.0, 1.0, 20, -1};
+////        return fitter.fit(h1d, "g+p1", init, range);
+//    }
+    @Override
+    public void endOfData() {
+        if (fitFile == null) {
+            return;
+        }
+
+        /*
+        IFitter fitter = aida.analysisFactory().createFitFactory().createFitter("chi2");
+//        fitter.setFitMethod("CleverChiSquared");
+//        fitter.setFitMethod("binnedMaximumLikelihood");
+
+        PrintWriter fitWriter = null;
+        try {
+            fitWriter = new PrintWriter(fitFile);
+        } catch (FileNotFoundException ex) {
+            Logger.getLogger(SampleZeroHVBiasChecker.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+//        for (SiSensor sensor : hists_rawadc.keySet()) {
+//            fitWriter.println(sensor.getName());
+//            IHistogram1D hist = hists_rawadc.get(sensor);
+//            //IHistogram1D fit = aida.histogram1D("1D fit", hist.yAxis().bins(), hist.yAxis().lowerEdge(), hist.yAxis().upperEdge());
+//            for (int i = 0; i < 640; i++) {
+//                fitWriter.format("%d\t", i);
+//                for (int y = 0; y < hist.yAxis().bins(); y++) {
+//                    for (int j = 0; j < hist.binHeight(i, y); j++) {
+//                        fit.fill(hist.binMeanY(i, y));
+//                    }
+//                }
+//                fitWriter.format("%f\t%f\t%f\t", fit.sumBinHeights(), fit.mean(), fit.rms());
+//                if (fit.sumBinHeights() > 100) {
+//                    IFitResult result = fitter.fit(fit, "g");
+//
+//                    if (result.isValid()) {
+//                        fitWriter.format("%f\t%f\t", result.fittedParameter("mean"), result.fittedParameter("sigma"));
+//                    }
+//                }
+//                fitWriter.println();
+//                fit.reset();
+//            } 
+//            fitWriter.flush();
+        }
+        fitWriter.close();
+        aida.tree().rm("1D fit");
+    */
+    }
+    
+   
+    
+}