def plot_delay_spectrum(): x1, y1 = np.loadtxt("data/pm1_delay.txt", unpack=True) x2, y2 = np.loadtxt("data/pm2_delay.txt", unpack=True) time = np.hstack((-x1, x2)) count = np.hstack((y1, y2)) error_count = np.sqrt(count + 1) plt.clf() plt.errorbar(time, count, yerr=error_count, fmt='s', color="black") func = lambda x, offset, mu, sigma, A: offset + GAUSS(x, mu, sigma, A) fit = Fit(func) fit.offset = 0 fit.mu = -45 fit.sigma = 60 fit.fit(time, count, error_count) fit.plot(box="tr", units={"mu": "ns", "sigma": "ns"}, color="red") print(fit) plt.xlabel(r"$\Delta T / \textrm{ns}$") plt.ylabel("Count") plt.savefig("out/delay_fit." + SAVETYPE) plt.clf() fit.plot_residual(time, count, error_count, fmt="s", box="br", color="black") plt.xlabel(r"$\Delta T / \textrm{ns}$") plt.ylabel("Count") plt.savefig("out/delay_residual." + SAVETYPE)
def plot_coincidence_na(): for spalte in (1, 2): columns = np.loadtxt("data/natrium_winkel.txt", unpack=True) angle = columns[0] count = columns[spalte] error_angle = 0.3 error_count = np.sqrt(count + 1) plt.clf() plt.errorbar(angle, count, xerr=error_angle, yerr=error_count, fmt=',', color="black") fit = Fit(GAUSS) fit.mu = 0 fit.sigma = 10 for i in range(5): errors = fit.combine_errors(angle, error_angle, error_count) fit.fit(angle, count, errors) fit.plot(fit.mu - 5 * fit.sigma, fit.mu + 5 * fit.sigma, box="bl", color="red") plt.ylim(0, plt.ylim()[1]) plt.xlabel("Winkel / Grad") plt.ylabel("Count") plt.savefig("out/coincidence_na_%d_fit." % spalte + SAVETYPE) plt.clf() fit.plot_residual(angle, count, errors, fmt="s", box="br", color="black") plt.xlabel("Winkel / Grad") plt.ylabel("Count") plt.savefig("out/coincidence_na_%d_residual." % spalte + SAVETYPE)
def local_fit(x, y, errors, mu, sigma): func = lambda x, mu, sigma, A, a0, a1: GAUSS(x, mu, sigma, A) + a0 + a1 * x fit = Fit(func) fit.mu = _simple_peak(y, mu, sigma) fit.sigma = sigma fit.A = y[fit.mu] fit.a0 = 0 fit.a1 = 0 for i in range(5): lower = max(fit.mu - 5 * fit.sigma, 0) upper = min(fit.mu + 5 * fit.sigma, len(x)) lx = x[lower:upper] ly = y[lower:upper] lerrors = errors[lower:upper] if i <= 2: fit.fit(lx, ly, lerrors, solver="curve_fit") else: fit.fit(lx, ly, lerrors, solver="minuit", method="migrad") return fit