diff options
| author | tlatorre <tlatorre@uchicago.edu> | 2020-10-05 14:36:40 -0500 |
|---|---|---|
| committer | tlatorre <tlatorre@uchicago.edu> | 2020-10-05 14:36:40 -0500 |
| commit | d48484c29d09a944de6f9251a3c659e76279464e (patch) | |
| tree | c056eaa94e7db434365c285d9a96c0e3659f9d95 /utils/sddm | |
| parent | 1cd79549ee8ceb0f5e64e06611d891098905c05a (diff) | |
| download | sddm-d48484c29d09a944de6f9251a3c659e76279464e.tar.gz sddm-d48484c29d09a944de6f9251a3c659e76279464e.tar.bz2 sddm-d48484c29d09a944de6f9251a3c659e76279464e.zip | |
major updates to the chi2 analysis
This commit fixes the chi2 analysis so that it is no longer biased.
Previously, the chi2 analysis pull plots showed a consistent bias. At
first, I thought this was due to the fact that the posterior wasn't
gaussian, but even after switching to percentile plots based on the
algorithm outlined in "Validating Bayesian Inference Algorithms with
Simulation-Based Calibration", I was still seeing a bias. I finally
tracked it down to the fact that I was applying the energy scale
parameters to the data instead of the Monte Carlo. Therefore, in this
commit I update the posterior to now apply the energy scale parameters
to the Monte Carlo instead of the data. This has the slight disadvantage
that the final histograms will be binned in the biased energy, but
that's not really a big deal.
In addition, this commit contains several other updates:
- switch to plotting percentile plots based on the algorithm in
"Validating Bayesian Inference Algorithms with Simulation-Based
Calibration" instead of pull plots
- apply both the energy scale and resolution at the individual particle
level, i.e. there is no longer an energy resolution term for electron
+ muon fits
- separate pull plots and coverage plots. Previously I was making both
the p-value coverage plots and the pull plots at the same time.
However, the pull plots shouldn't have anything to do with the GENIE
weights whereas the p-value coverage plots should draw samples
weighted by the GENIE weights. In addition, for the pull plots we draw
new truth parameters on every iteration whereas for the p-value
coverage plots we only draw them once.
- switch to using KDEMove() for the MCMC since I think it samples
multimodal distributions a lot better than the default emcee move.
- I now correct for the reconstruction energy bias in plot-michel and
plot-muons
Diffstat (limited to 'utils/sddm')
| -rw-r--r-- | utils/sddm/__init__.py | 12 | ||||
| -rwxr-xr-x | utils/sddm/dc.py | 9 | ||||
| -rw-r--r--[-rwxr-xr-x] | utils/sddm/plot.py | 0 | ||||
| -rw-r--r--[-rwxr-xr-x] | utils/sddm/plot_energy.py | 0 |
4 files changed, 21 insertions, 0 deletions
diff --git a/utils/sddm/__init__.py b/utils/sddm/__init__.py index f213c2b..8bed558 100644 --- a/utils/sddm/__init__.py +++ b/utils/sddm/__init__.py @@ -4,6 +4,8 @@ from itertools import izip_longest import os import h5py import pandas as pd +import numpy as np +import contextlib IDP_E_MINUS = 20 IDP_MU_MINUS = 22 @@ -183,3 +185,13 @@ def read_hdf(filename, df): with h5py.File(filename,'r') as f: data = f[df][:] return pd.DataFrame(data) + +# from https://stackoverflow.com/questions/2891790/how-to-pretty-print-a-numpy-array-without-scientific-notation-and-with-given-pre +@contextlib.contextmanager +def printoptions(*args, **kwargs): + original = np.get_printoptions() + np.set_printoptions(*args, **kwargs) + try: + yield + finally: + np.set_printoptions(**original) diff --git a/utils/sddm/dc.py b/utils/sddm/dc.py index 745220b..ee62656 100755 --- a/utils/sddm/dc.py +++ b/utils/sddm/dc.py @@ -40,6 +40,15 @@ DC_BREAKDOWN = 0x800 # nans in case an expected value is predicted to be zero. EPSILON = 1e-10 +def truncnorm_scaled(low,high,loc=0,scale=1,random_state=None): + """ + Just like scipy's truncnorm.rvs() except we auto convert the clip values. + """ + low = np.atleast_1d(low) + high = np.atleast_1d(high) + a, b = (low - loc)/scale, (high - loc)/scale + return truncnorm.rvs(a,b,loc,scale,random_state=random_state) + def get_proposal_func(stepsizes, low, high): """ Returns a function which produces proposal steps for a Metropolis Hastings diff --git a/utils/sddm/plot.py b/utils/sddm/plot.py index 935b26a..935b26a 100755..100644 --- a/utils/sddm/plot.py +++ b/utils/sddm/plot.py diff --git a/utils/sddm/plot_energy.py b/utils/sddm/plot_energy.py index 0ba4076..0ba4076 100755..100644 --- a/utils/sddm/plot_energy.py +++ b/utils/sddm/plot_energy.py |
