Example #1
0
def gausanpassung(x1, y1, x1_error, y1_error):
    model = odr.Model(gauss)
    width = 0.7
    height = 1.

    for i in range(0, int(eckdaten[0, 1])):
        # print(eckdaten[3+i*2,:])
        x = x1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        y = y1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        x_error = x1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]
        y_error = y1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]

        # Create a RealData object
        data = odr.RealData(x, y, sx=x_error, sy=y_error)

        # Set up ODR with the model and data.
        presets = [ecal.E(eckdaten[3 + i * 2, 1]), 10, 20, 0., 25.]
        # presets=[eckdaten[3+i*2,1], width, y1[int(eckdaten[3+i*2,1])]*height, 0. ,1.]
        out = odr.ODR(data, model, beta0=presets).run()

        popt = out.beta
        perr = out.sd_beta
        # maxima[0,i]=popt[0]#a
        # maxima[1,i]=perr[0]#a_err
        # maxima[2,i]=popt[2]#d
        # maxima[3,i]=perr[2]#d_err
        # print(popt,min(x), max(x))
        maxima[i] = np.vstack((popt, perr))
        b = ufloat(popt[1], perr[1])
        x_fit = np.linspace(min(x), max(x), 10000)
        y_fit = gauss(maxima[i, 0], x_fit)
        print(popt[0], perr[0])
        # print(np.hstack(np.stack((popt,perr),axis=1)))
        plt.plot(x_fit,
                 y_fit,
                 label='137-Cs Peak (' + str(round(popt[0], 2)) +
                 str(round(perr[0], 2)) + '+/-' + str(round(perr[0], 2)) +
                 ') keV')
        plt.errorbar(x=popt[0],
                     y=popt[2] + popt[3] * popt[0] + popt[4],
                     yerr=perr[2],
                     xerr=perr[0],
                     marker='x',
                     linestyle='None',
                     color='red',
                     zorder=3)
        # plt.plot(x_fit, gauss(presets, x_fit), color='grey', zorder=-3)
    return maxima
Example #2
0
def gausanpassung(x1, y1, x1_error, y1_error):
    model = odr.Model(gauss)
    width = 3.
    height = 1.
    if detektortyp == 'H':
        width = 0.7
        height = 1.

    for i in range(0, int(eckdaten[0, 1])):
        x = x1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        y = y1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        x_error = x1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]
        y_error = y1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]

        # Create a RealData object
        data = odr.RealData(x, y, sx=x_error, sy=y_error)

        # Set up ODR with the model and data.
        presets = [
            ecal.E(eckdaten[3 + i * 2, 1]), width,
            y1[int(eckdaten[3 + i * 2, 1])] * height, 0., 1.
        ]
        out = odr.ODR(data, model, beta0=presets).run()

        popt = out.beta
        perr = out.sd_beta
        b = ufloat(popt[1], perr[1])
        maxima[0, i] = popt[0]  #a
        maxima[1, i] = perr[0]  #a_err
        print(perr[0])
        maxima[2, i] = popt[2]  #d
        maxima[3, i] = perr[2]  #d_err
        relint[i] = eckdaten[3 + i * 2, 4]
        FWHM = 2 * np.sqrt(2 * np.log(2)) * b
        # print(str(i+1)+'. Peak;'+str(round(popt[0],2))+'plusundminus'+str(round(perr[0],2))+';'+str(round(popt[2],2))+'plusundminus'+str(round(perr[2],2)))
        # print(datensatz+';'+str(i+1)+'. Peak;'+str(b)+';'+str(FWHM))
        x_fit = np.linspace(min(x), max(x), 10000)
        y_fit = gauss(popt, x_fit)

        plt.plot(x_fit,
                 y_fit,
                 label=str(i + 1) + '. Peak (E=(' + str(round(popt[0], 2)) +
                 '$\pm$' + str(round(perr[0], 2)) + ')keV)')
Example #3
0
def gausanpassung(x1, y1, x1_error, y1_error):
    model = odr.Model(gauss)
    width = 0.7
    height = 1.

    for i in range(0, int(eckdaten[0, 1])):
        # print(eckdaten[3+i*2,:])
        x = x1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        y = y1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        x_error = x1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]
        y_error = y1_error[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2,
                                                                    2])]

        # Create a RealData object
        data = odr.RealData(x, y, sx=x_error, sy=y_error)

        # Set up ODR with the model and data.
        presets = [
            ecal.E(eckdaten[3 + i * 2, 1]), width,
            y1[int(eckdaten[3 + i * 2, 1])] * height, 0., 1.
        ]
        # presets=[eckdaten[3+i*2,1], width, y1[int(eckdaten[3+i*2,1])]*height, 0. ,1.]
        out = odr.ODR(data, model, beta0=presets).run()

        popt = out.beta
        perr = out.sd_beta
        maxima[0, i] = popt[0]  #a
        maxima[1, i] = perr[0]  #a_err
        maxima[2, i] = popt[2]  #d
        maxima[3, i] = perr[2]  #d_err
        # print(perr[2])
        b = ufloat(popt[1], perr[1])
        x_fit = np.linspace(min(x), max(x), 10000)
        y_fit = gauss(popt, x_fit)

        plt.plot(x_fit,
                 y_fit,
                 label=str(i + 1) + '. Peak (' + str(round(popt[0], 2)) +
                 '+/-' + str(round(perr[0], 2)) + ') keV')
        # plt.plot(x_fit, gauss(presets, x_fit), color='grey', zorder=-3)
    return maxima
Example #4
0
eckdaten = genfromtxt('Cs_eckdaten.txt', delimiter=':')
data = genfromtxt(datensatz + '.txt', delimiter=';')
hintergrund_data = genfromtxt(datensatz + '_Hintergrund.txt', delimiter=';')
x0 = data[:, 0]
y0 = data[:, 1]
hintergrund = hintergrund_data[:, 1]
#plt.plot(x0, hintergrund)
#plt.plot(x0, y0)
hintergrund = 75702 / 72878 * hintergrund
# y0 = y0-hintergrund
y0[y0 < 0] = 0
y0_error = np.sqrt(y0)
x0_error = np.ones(len(x0)) * 0.5

# rechne Kanal in Energie um
x0 = ecal.E(x0)
x0_error = ecal.deltaE(x0, x0_error)

# plt.errorbar(x0, y0, yerr=y0_error, xerr=x0_error, zorder=0, label='data', fmt='none')


# Plotte an alle i Peaks mit den grenzen aus den eckdaten eine Gaussfunktion(gauss) mit hilfe von ODR
def gausanpassung(x1, y1, x1_error, y1_error):
    model = odr.Model(gauss)
    width = 0.7
    height = 1.

    for i in range(0, int(eckdaten[0, 1])):
        # print(eckdaten[3+i*2,:])
        x = x1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
        y = y1[int(eckdaten[3 + i * 2, 0]):int(eckdaten[3 + i * 2, 2])]
Example #5
0
data = genfromtxt('./Messung_'+vermesser+datensatz+'.txt',delimiter=';')
hintergrund_data = genfromtxt('./Messung_'+vermesser+'Hintergrund_'+detektortyp+'.txt',delimiter=';')
x0 = data[:, 0]
y0 = data[:, 1]
hintergrund = hintergrund_data[:, 1]
#plt.plot(x0, hintergrund)
#plt.plot(x0, y0)
y0 = y0 - hintergrund
y0_error = np.sqrt(y0)
x0_error = np.ones(len(x0))*5
if detektortyp == 'H':
	y0_error = np.sqrt(y0)
	x0_error = np.ones(len(x0))*0.5

# rechne Kanal in Energie um
x0=ecal.E(x0)
x0_error=ecal.deltaE(x0,x0_error)
plt.errorbar(x0, y0, yerr=y0_error, xerr=x0_error, zorder=0, label='data', fmt='none')

# plt.plot(x0, y0)
model = odr.Model(gauss)

width=3.
height=1.

if detektortyp == 'H':
	width=0.7
	height=1.

# Plotte an alle i Peaks mit den grenzen aus den eckdaten eine Gaussfunktion(gauss) mit hilfe von ODR
for i in range(0,int(eckdaten[0,1])):
Example #6
0
        x_fit = np.linspace(min(x), max(x), 10000)
        y_fit = gauss(popt, x_fit)

        plt.plot(x_fit,
                 y_fit,
                 label=str(i + 1) + '. Peak (' + str(round(popt[0], 2)) +
                 '+/-' + str(round(perr[0], 2)) + ') keV')
        # plt.plot(x_fit, gauss(presets, x_fit), color='grey', zorder=-3)
    return maxima


hintergrund = 75702 / 72878 * hintergrund
y0_error = np.sqrt(y0)
x0_error = np.ones(len(x0)) * 0.5
y0_uf = unp.uarray(y0, y0_error)
x0_uf = unp.uarray(ecal.E(x0), ecal.deltaE(x0, x0_error))
hintergrund_uf = unp.uarray(hintergrund, np.sqrt(hintergrund))
y0_uf = y0_uf - hintergrund_uf
y0_uf[y0_uf < 0] = 0
# y0_uf=unp.uarray(y0,y0_error)

plt.figure(dpi=400, figsize=(10, 5))
ykorr, ykorr_error = korrektur(y0_uf)
# plt.plot(x0,y0)
plt.errorbar(ecal.E(x0), ykorr, xerr=x0_error, yerr=ykorr_error)
pltdata = genfromtxt('data.txt', delimiter=';')
# for i in range(0,int(eckdaten[0,1])):
#     x_fit = np.linspace(pltdata[i,4],pltdata[i,5], 10000)
#     y_fit = gauss([pltdata[i,0],pltdata[i,1],pltdata[i,2],0], x_fit)
#
#     plt.plot(x_fit, y_fit, label=str(i+1)+'. Peak ('+str(round(pltdata[i,0],2))+') keV')