aboutsummaryrefslogtreecommitdiff
path: root/utils/plot-michels
diff options
context:
space:
mode:
Diffstat (limited to 'utils/plot-michels')
-rwxr-xr-xutils/plot-michels22
1 files changed, 9 insertions, 13 deletions
diff --git a/utils/plot-michels b/utils/plot-michels
index b313c3e..9637e13 100755
--- a/utils/plot-michels
+++ b/utils/plot-michels
@@ -30,17 +30,7 @@ from sddm.stats import *
import emcee
from sddm.dc import estimate_errors, EPSILON
import nlopt
-import contextlib
-
-# 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)
+from sddm import printoptions
particle_id = {20: 'e', 22: 'u'}
@@ -100,6 +90,7 @@ if __name__ == '__main__':
from sddm.plot_energy import *
from sddm.plot import *
from sddm import setup_matplotlib
+ from sddm.utils import correct_energy_bias
parser = argparse.ArgumentParser("plot fit results")
parser.add_argument("filenames", nargs='+', help="input files")
@@ -108,6 +99,7 @@ if __name__ == '__main__':
parser.add_argument("--nhit-thresh", type=int, default=None, help="nhit threshold to apply to events before processing (should only be used for testing to speed things up)")
parser.add_argument("--print-nll", action='store_true', default=False, help="print nll values")
parser.add_argument("--steps", type=int, default=1000, help="number of steps in the MCMC chain")
+ parser.add_argument("--walkers", type=int, default=100, help="number of walkers")
args = parser.parse_args()
setup_matplotlib(args.save)
@@ -120,7 +112,9 @@ if __name__ == '__main__':
for run, df in rhdr.groupby('run'):
evs.append(get_events(df.filename.values, merge_fits=True, nhit_thresh=args.nhit_thresh))
ev = pd.concat(evs)
+ ev = correct_energy_bias(ev)
ev_mc = get_events(args.mc, merge_fits=True)
+ ev_mc = correct_energy_bias(ev_mc)
# Drop events without fits
ev = ev[~np.isnan(ev.fmin)]
@@ -195,17 +189,19 @@ if __name__ == '__main__':
stepsizes = estimate_errors(nll,xopt,low,high)
+ stepsizes[1] = 0.1
+
with printoptions(precision=3, suppress=True):
print("Errors: ", stepsizes)
- pos = np.empty((20, len(x0)),dtype=np.double)
+ pos = np.empty((args.walkers, len(x0)),dtype=np.double)
for i in range(pos.shape[0]):
pos[i] = xopt + np.random.randn(len(x0))*stepsizes
pos[i,:] = np.clip(pos[i,:],low,high)
nwalkers, ndim = pos.shape
- sampler = emcee.EnsembleSampler(nwalkers, ndim, lambda x: -nll(x))
+ sampler = emcee.EnsembleSampler(nwalkers, ndim, lambda x: -nll(x), moves=emcee.moves.KDEMove())
with np.errstate(invalid='ignore'):
sampler.run_mcmc(pos, args.steps)