model.py (1510B)
1 #!/usr/bin/env python3.9 2 3 import numpy as np 4 from scipy.optimize import curve_fit 5 import matplotlib.pyplot as plt 6 7 global m_p; m_p = 0.13957 8 9 sig_p = lambda x: np.sqrt(1 - 4*m_p**2/x) 10 g_s = lambda s, m_q, g_q: g_q*s/m_q**2 * (sig_p(s)/sig_p(m_q**2))**3 * np.heaviside(s - 4*m_p**2, 0) 11 12 def model(s, m_q, g_q, m_w, g_w, e_w, a, b, c): 13 part1 = (m_q)**4/((m_q**2 - s)**2 + m_q**2*g_s(s, m_q, g_q)**2) 14 part2 = 1 + (e_w * 2*s * (m_w**2 - s))/((m_w**2 - s)**2 + m_w**2*g_w**2) 15 part3 = (1 + a*s + b*s**2 + c*s**3)**2 16 return part1 * part2 * part3 17 18 def myplot(name, x_data, y_data, p, dp, sigma): 19 20 x_model = np.linspace(x_data[0], x_data[-1], 500) 21 y_model = model(x_model, *p) 22 23 plt.figure(figsize=[10, 7]) 24 plt.title(f'{name} DATA FIT') 25 26 plt.errorbar(x_data, y_data, yerr=sigma, fmt='.k', c='black', label=f'{name}') 27 plt.plot(x_model, y_model, color='red', label='fit') 28 29 p, dp = np.round(p, 3), np.round(dp, 3) 30 plt.annotate(r'$M_{\rho} = $' + f'({p[0]}' + r'$\pm$' + f'{dp[0]}) GeV', (0.2, 40)) 31 plt.annotate(r'$\Gamma_{\rho} = $' + f'({p[1]}' + r'$\pm$' + f'{dp[1]}) GeV', (0.2, 38)) 32 plt.annotate(r'$M_{\omega} = $' + f'({p[2]}' + r'$\pm$' + f'{dp[2]}) GeV', (0.2, 36)) 33 plt.annotate(r'$\Gamma_{\omega} = $' + f'({p[3]}' + r'$\pm$' + f'{dp[3]}) GeV', (0.2, 34)) 34 35 plt.title(f't0-Singlefit of {name}') 36 plt.ylabel(r'$|F_{\pi}^V(s)|^2|$') 37 plt.xlabel(r'$\sqrt{s}$[GeV]') 38 plt.legend(loc='best') 39 40 plt.savefig(f'./plots/{name}.png') 41 plt.close()