Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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