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");
+ */
+ }
+
+
+
+}
|