aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2018-10-03 09:46:02 -0500
committertlatorre <tlatorre@uchicago.edu>2018-10-03 09:46:02 -0500
commit405f0d448eb15b4f686c1f7ee47794d82eaaf62c (patch)
treed6283283751465a82df74cff8fd864e7b6452648 /src
parent3650f72cc3570b51dc225886fd947f86d999e7a3 (diff)
downloadsddm-405f0d448eb15b4f686c1f7ee47794d82eaaf62c.tar.gz
sddm-405f0d448eb15b4f686c1f7ee47794d82eaaf62c.tar.bz2
sddm-405f0d448eb15b4f686c1f7ee47794d82eaaf62c.zip
add a script to plot fit results
Diffstat (limited to 'src')
-rwxr-xr-xsrc/plot.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/plot.py b/src/plot.py
new file mode 100755
index 0000000..6a2fe73
--- /dev/null
+++ b/src/plot.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+from __future__ import print_function, division
+import yaml
+
+SNOMAN_MASS = {
+ 20: 0.511,
+ 21: 0.511,
+ 22: 105.658,
+ 23: 105.658
+}
+
+if __name__ == '__main__':
+ import argparse
+ import matplotlib.pyplot as plt
+ import numpy as np
+
+ parser = argparse.ArgumentParser("plot fit results")
+ parser.add_argument("filenames", nargs='+', help="input files")
+ args = parser.parse_args()
+
+ for filename in args.filenames:
+ print(filename)
+ with open(filename) as f:
+ data = yaml.load(f.read())
+
+ dx = []
+ dy = []
+ dz = []
+ e = []
+ for event in data['data']:
+ # get the particle ID
+ id = event['mctk'][-1]['id']
+ mass = SNOMAN_MASS[id]
+ # for some reason it's the *second* track which seems to contain the
+ # initial energy
+ true_energy = event['mctk'][-1]['energy']
+ # The MCTK bank has the particle's total energy (except for neutrons)
+ # so we need to convert it into kinetic energy
+ ke = true_energy - mass
+ energy = event['ev'][0]['fit'][0]['energy']
+ e.append(energy-ke)
+ true_posx = event['mcvx'][0]['posx']
+ posx = event['ev'][0]['fit'][0]['posx']
+ dx.append(posx-true_posx)
+ true_posy = event['mcvx'][0]['posy']
+ posy = event['ev'][0]['fit'][0]['posy']
+ dy.append(posy-true_posy)
+ true_posz = event['mcvx'][0]['posz']
+ posz = event['ev'][0]['fit'][0]['posz']
+ dz.append(posz-true_posz)
+
+ print("dT = %.2g +/- %.2g" % (np.mean(e), np.std(e)))
+ print("dx = %4.2g +/- %.2g" % (np.mean(dx), np.std(dx)))
+ print("dy = %4.2g +/- %.2g" % (np.mean(dy), np.std(dy)))
+ print("dz = %4.2g +/- %.2g" % (np.mean(dz), np.std(dz)))
+
+ plt.figure(1)
+ plt.hist(e, histtype='step', label=filename)
+ plt.xlabel("Kinetic Energy difference (MeV)")
+ plt.figure(2)
+ plt.hist(dx, histtype='step', label=filename)
+ plt.xlabel("X Position difference (cm)")
+ plt.figure(3)
+ plt.hist(dy, histtype='step', label=filename)
+ plt.xlabel("Y Position difference (cm)")
+ plt.figure(4)
+ plt.hist(dz, histtype='step', label=filename)
+ plt.xlabel("Z Position difference (cm)")
+
+ plt.figure(1)
+ plt.legend()
+ plt.figure(2)
+ plt.legend()
+ plt.figure(3)
+ plt.legend()
+ plt.figure(4)
+ plt.legend()
+ plt.show()