multiple_fit.py (3667B)
1 2 import numpy as np 3 import sympy as sp 4 from scipy.linalg import block_diag 5 from matplotlib import pyplot as plt 6 from scipy.special import gammaincc 7 8 from method import * 9 from model import * 10 11 import matplotlib.pylab as pylab 12 params = {'legend.fontsize': 'x-large', 13 'figure.figsize': (15, 5), 14 'axes.labelsize': 'x-large', 15 'axes.titlesize':'x-large', 16 'xtick.labelsize':'x-large', 17 'ytick.labelsize':'x-large'} 18 pylab.rcParams.update(params) 19 20 global p0; 21 p0 = [0.9, 0.2, 0.81, 0.04, 0.02, -1, 0.84, 1.55] # in GeV 22 23 def main(): 24 # Preparation 25 SND_data = np.loadtxt('../data/SND-VFF.txt') 26 SND_x = SND_data[:, 0] 27 SND_y = SND_data[:, 1] 28 SND_statcov = (np.eye(len(SND_x)) * SND_data[:, 2])**2 29 SND_relsystcov = (np.eye(len(SND_x)) * \ 30 np.array([0.032 if i<=2 else 0.013 for i in range(len(SND_x))]))**2 31 32 CMD2_data = np.loadtxt('../data/SND-VFF.txt') 33 CMD2_x = CMD2_data[:, 0] 34 CMD2_y = CMD2_data[:, 1] 35 CMD2_statcov = (np.eye(len(CMD2_x)) * CMD2_data[:, 2])**2 36 CMD2_relsystcov = [] 37 for i in range(len(CMD2_x)): 38 if i<=43: 39 CMD2_relsystcov.append(0.006) 40 elif i>10 and i<=53: 41 CMD2_relsystcov.append(0.007) 42 else: 43 CMD2_relsystcov.append(0.008) 44 CMD2_relsystcov = (np.eye(len(CMD2_x)) * np.array(CMD2_relsystcov))**2 45 46 KLOE_data = np.loadtxt('../data/KLOE-VFF.txt') 47 KLOE_x = KLOE_data[:, 0] 48 KLOE_y = KLOE_data[:, 1] 49 KLOE_statcov = np.loadtxt('../data/KLOE-StatCov.txt') 50 KLOE_relsystcov = np.loadtxt('../data/KLOE-RelSystCov.txt') 51 52 BABAR_data = np.loadtxt('../data/BABAR-VFF.txt') 53 BABAR_x = BABAR_data[:, 0] 54 BABAR_y = BABAR_data[:, 1] 55 BABAR_statcov = np.loadtxt('../data/BABAR-StatCov.txt') 56 BABAR_relsystcov = np.loadtxt('../data/BABAR-RelSystCov.txt') 57 58 x_data = np.block([SND_x, CMD2_x, KLOE_x, BABAR_x]) 59 y_data = np.block([SND_y, CMD2_y, KLOE_y, BABAR_y]) 60 cov_stat = block_diag(SND_statcov, CMD2_statcov, KLOE_statcov, BABAR_statcov) 61 cov_relsyst = block_diag(SND_relsystcov, CMD2_relsystcov, KLOE_relsystcov, BABAR_relsystcov) 62 var_str = "m_q g_q m_w g_w e_w a b c" 63 64 # Fit 65 p, dp, chi_sq = t0_fit(model, var_str, x_data, y_data, p0, cov_stat,\ 66 cov_relsyst) 67 68 69 dof = len(x_data) - len(p) 70 p_value = 1 - gammaincc(chi_sq[-1]/2, dof/2) 71 chi_min = chi_sq[-1]/dof 72 73 with open(f'./results/multi.txt', 'w+') as f: 74 for i in range(len(p)): 75 f.write(f'{p[i]}\t\\pm {dp[i]}\n') 76 77 f.write(f'chi_sq_min_dof = {chi_min}\n') 78 f.write(f'p_value = {p_value}\n') 79 80 81 # Plot 82 x_model = np.linspace(x_data[0], x_data[-1], 500) 83 x = sp.symbols('x') 84 la_mod = model(x, *p) 85 la_mod = sp.lambdify(x, la_mod, modules=['numpy', {'Heaviside': np.heaviside}]) 86 y_model = la_mod(x_model) 87 88 plt.figure(figsize=[10, 7]) 89 90 plt.errorbar(SND_x, SND_y, yerr=np.sqrt(np.diag(SND_statcov)), fmt='.', ms=8, label='SND', c='blue', alpha=0.4) 91 plt.errorbar(CMD2_x, CMD2_y, yerr=np.sqrt(np.diag(CMD2_statcov)), fmt='.', ms=8, label='CMD2', c='green', alpha=0.4) 92 plt.errorbar(KLOE_x, KLOE_y, yerr=np.sqrt(np.diag(KLOE_statcov)), fmt='.', ms=8, label='KLOE', c='orange', alpha=0.4) 93 plt.errorbar(BABAR_x, BABAR_y, yerr=np.sqrt(np.diag(BABAR_statcov)), fmt='.', ms=8, label='BABAR', c='red', alpha=0.4) 94 95 plt.plot(x_model, y_model, lw=2, c='black', label='Fit') 96 97 plt.title('t0-Multifit') 98 plt.legend(loc='best') 99 plt.ylabel(r'$|F_{\pi}^V(s)|^2|$') 100 plt.xlabel(r'$\sqrt{s}$[GeV]') 101 102 plt.savefig('./plots/multi.png') 103 plt.close() 104 105 106 if __name__ == "__main__": 107 main()