Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Sun Apr 25 10:44:22 2021
- Autore: Stefano Carsi
- Data ultima modifica: 202104271819
- - Cosa ho fatto:
- *
- - Cosa devo fare:
- *
- - Per relazione:
- *
- - Info per l'uso:
- > Serve un pizzico di manualità
- > Runnare la cella, aggiustare le cose e provare a far convergere
- il plot
- > Solo dopo che si è soddisfatti, runnare la cella sottostante per memo-
- rizzarsi i parametri ottimizzati dal fit
- > Infine esportare il file con tutti i dati
- > Le figure dei fit, se serve, meglio esportarle a mano
- > Nota bene: il vettore degli starting point non può essere vuoto!
- """
- #INIZIO STANDARD
- #%matplotlib auto
- import matplotlib.pyplot as plt
- import numpy as np
- from scipy.optimize import curve_fit
- from matplotlib import use as mplUse
- mplUse("Qt5Agg")
- #%matplotlib inline
- import os
- path = r"F:\Corsi\Laboratorio 4 - Fisica nucleare e subnucleare\3 - Spettroscopia gamma\PITONE"
- os.chdir(path)
- Export = False
- #%% Carico i dati
- listaMatrici = []
- listaNum = []
- for e in os.scandir(r"..\datadir_voltagescan_2021"):
- if e.name.split(".")[1] != "dat": continue
- tmp = np.loadtxt(e.path)
- listaMatrici.append(tmp.copy())
- listaNum.append(int(e.name.split(".")[0][-2:]))
- #listaNum = np.array(listaNum, dtype = np.int8)
- zipIt = zip(listaNum, range(len(listaNum)))
- myDict = dict(zipIt)
- #%% Inizio - Modelli di fitting
- from dataphile.statistics.regression.modeling import Parameter, Model, CompositeModel, AutoGUI
- def gauss(x,a,mu,sigma):
- return a/(sigma*np.sqrt(2*np.pi))* np.exp(-(x-mu)**2 / (2*sigma**2))
- def line(x, m, q):
- return m*x+q
- def exp(x,a,k):
- return a*np.exp(-k*x)
- #%% 52 - funziona, ma non usato
- numRun = 52
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- h, bins = np.histogram(dati, bins=100)
- binc = bins[:-1] + (bins[1] - bins[0])
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("Titolo", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC")
- ax.set_ylabel("Entries")
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Plotto i dati da fittare
- cond = (binc>1273) & (binc<1560)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- model = CompositeModel(
- Model(gauss,
- Parameter(value=443026, bounds=(3e5, 3e6), label='A'),
- Parameter(value=1434.95, bounds=(0, 4095), label='mu'),
- Parameter(value=42.4055, bounds=(0, 300), label='sigma'),
- label='gaussiana'),
- Model(line,
- Parameter(value=-2.54899, bounds=(-10, 10), label='m'),
- Parameter(value=4205.7, bounds=(-100, 10000), label='q'),
- label='retta'),
- label='gaussian_peaks')
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', label='model')
- ax.legend();
- fig
- ax.set_position([0.15, 0.30, 0.84, 0.56])
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.12], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect));
- A_Riassunto = model.summary()
- #%% 52 Ufficiale (old)
- numRun = 52
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- h, bins = np.histogram(dati, bins=150)
- binc = bins[:-1] + (bins[1] - bins[0])
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 600V - Gain: 1000 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- #ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Plotto i dati da fittare
- cond = (binc<1560) & (binc>243)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- model = CompositeModel(
- Model(gauss,
- Parameter(value=463743, bounds=(1e5, 3e6), label='A'),
- Parameter(value=304.195, bounds=(0, 4095), label='mu'),
- Parameter(value=16.2228, bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=128113, bounds=(1e5, 3e6), label='A'),
- Parameter(value=536.718, bounds=(0, 4095), label='mu'),
- Parameter(value=21.1004, bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=134248, bounds=(1e5, 3e6), label='A'),
- Parameter(value=655.77, bounds=(0, 4095), label='mu'),
- Parameter(value=21.771, bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=296409, bounds=(1e5, 3e6), label='A'),
- Parameter(value=768.839, bounds=(0, 4095), label='mu'),
- Parameter(value=25.0682, bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=474508, bounds=(1e5, 3e6), label='A'),
- Parameter(value=888.935, bounds=(0, 4095), label='mu'),
- Parameter(value=28.5505, bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=276598, bounds=(1e5, 3e6), label='A'),
- Parameter(value=1427.27, bounds=(0, 4095), label='mu'),
- Parameter(value=40.4266, bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=9142.08, bounds=(0, 1e5), label='a'),
- Parameter(value=0.00208337, bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- fig
- ax.set_position([0.15, 0.30, 0.84, 0.56])
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.12], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect));
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_52 = model.summary()
- Riassunto52 = np.array(Riassunto_52)
- if Export: pass
- #plt.savefig(r'../RELAZIONE/FIGURE/risoluzione-52.eps', format='eps')
- plt.show()
- #%% 52 nuovo ufficiale OK
- # Nota, ho alzato il bin150->200, ora converge
- # Carico i dati
- numRun = 52
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- # Costruisco l'istogramma e trovo il centro
- h, bins = np.histogram(dati, bins=200)
- binc = bins[:-1] + (bins[1] - bins[0])
- # Creo figura e assi su cui disegnare
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 600V - Gain: 1000 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Seleziono e Plotto i dati da fittare
- cond = (binc<2633) & (binc>243)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- # Starting points: inseriti copiando quelli di convergenza
- startPars = np.array([
- 3.14020187e+05, 2.98589322e+02, 1.43257226e+01,
- 9.41411082e+04, 5.34214983e+02, 2.02581202e+01,
- 1.04459955e+05, 6.51821651e+02, 2.23514168e+01,
- 2.30961972e+05, 7.65474019e+02, 2.49634128e+01,
- 3.65195534e+05, 8.86502718e+02, 2.82249031e+01,
- 2.14699579e+05, 1.42224403e+03, 4.12398651e+01,
- 1.13048417e+05, 1.76150564e+03, 1.49847505e+02,
- 6.24648382e+04, 2.11018949e+03, 1.12551885e+02,
- 9.82593192e+04, 2.47588684e+03, 1.06711679e+02,
- 7.81582354e+03, 2.32745796e-03])
- # Movello di fitting
- model = CompositeModel(
- Model(gauss,
- Parameter(value=startPars[0], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[1], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[2], bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=startPars[3], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[4], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[5], bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=startPars[6], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[7], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[8], bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=startPars[9], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[10], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[11], bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=startPars[12], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[13], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[14], bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=startPars[15], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[16], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[17], bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- Model(gauss,
- Parameter(value=startPars[18], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[19], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[20], bounds=(0, 100), label='sigma'),
- label='gaussiana 7'),
- Model(gauss,
- Parameter(value=startPars[21], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[22], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[23], bounds=(0, 100), label='sigma'),
- label='gaussiana 8'),
- Model(gauss,
- Parameter(value=startPars[24], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[25], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[26], bounds=(0, 100), label='sigma'),
- label='gaussiana 9'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=startPars[27], bounds=(0, 1e5), label='a'),
- Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- # Disegno la curva da muovere
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- # Mostro la figura
- fig
- # Ridimensiono gli assi per fare spazio ai cursori
- ax.set_position([0.10, 0.30, 0.84, 0.62])
- # Chiamo ciò che fa la magia
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect),
- sigma=np.sqrt(yVect));
- #%%
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_52 = model.summary()
- Riassunto52 = np.array(Riassunto_52)
- if Export: pass
- #plt.savefig(r'../RELAZIONE/FIGURE/risoluzione-52.eps', format='eps')
- #plt.show()
- #%% 53 - Fatto OK
- # Nota, ho alzato il bin150->200, ora converge
- # Carico i dati
- numRun = 53
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- # Costruisco l'istogramma e trovo il centro
- h, bins = np.histogram(dati, bins=200)
- binc = bins[:-1] + (bins[1] - bins[0])
- # Creo figura e assi su cui disegnare
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 650V - Gain: 500 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Seleziono e Plotto i dati da fittare
- cond = (binc<2360) & (binc>220)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- # Starting points: inseriti copiando quelli di convergenza
- startPars = np.array([
- 3.42507160e+05, 2.80817395e+02, 1.24616954e+01,
- 1.03919529e+05, 4.90186785e+02, 2.03356879e+01,
- 1.18326472e+05, 5.99110882e+02, 2.07618554e+01,
- 2.37704890e+05, 7.02525659e+02, 2.16424925e+01,
- 3.85261776e+05, 8.10998553e+02, 2.55724833e+01,
- 2.21297335e+05, 1.29723065e+03, 3.59272711e+01,
- 1.12844278e+05, 1.60399837e+03, 1.34508650e+02,
- 7.36554529e+04, 1.92969659e+03, 1.30558647e+02,
- 8.67953207e+04, 2.24743304e+03, 7.91527781e+01,
- 8.00390614e+03, 2.48022403e-03])
- # Movello di fitting
- model = CompositeModel(
- Model(gauss,
- Parameter(value=startPars[0], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[1], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[2], bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=startPars[3], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[4], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[5], bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=startPars[6], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[7], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[8], bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=startPars[9], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[10], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[11], bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=startPars[12], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[13], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[14], bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=startPars[15], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[16], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[17], bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- Model(gauss,
- Parameter(value=startPars[18], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[19], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[20], bounds=(0, 100), label='sigma'),
- label='gaussiana 7'),
- Model(gauss,
- Parameter(value=startPars[21], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[22], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[23], bounds=(0, 100), label='sigma'),
- label='gaussiana 8'),
- Model(gauss,
- Parameter(value=startPars[24], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[25], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[26], bounds=(0, 100), label='sigma'),
- label='gaussiana 9'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=startPars[27], bounds=(0, 1e5), label='a'),
- Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- # Disegno la curva da muovere
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- # Mostro la figura
- fig
- # Ridimensiono gli assi per fare spazio ai cursori
- ax.set_position([0.10, 0.30, 0.84, 0.62])
- # Chiamo ciò che fa la magia
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect),
- sigma=np.sqrt(yVect));
- #%%
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_53 = model.summary()
- Riassunto53 = np.array(Riassunto_53)
- #%% 54 - Fatto
- # I parametri soo fatti sui 200 bin
- # Carico i dati
- numRun = 54
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- # Costruisco l'istogramma e trovo il centro
- h, bins = np.histogram(dati, bins=200)
- binc = bins[:-1] + (bins[1] - bins[0])
- # Creo figura e assi su cui disegnare
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 700V - Gain: 200 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Seleziono e Plotto i dati da fittare
- cond = (binc<1705) & (binc>166)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- # Starting points: inseriti copiando quelli di convergenza
- startPars = np.array([
- 4.62943107e+05, 2.26198954e+02, 1.42027020e+01,
- 4.30064153e+05, 3.51438064e+02, 6.29233950e+01,
- 1.10434659e+05, 4.57722754e+02, 1.32710721e+01,
- 2.80277831e+05, 5.27133855e+02, 1.74496915e+01,
- 4.17788000e+05, 6.04375499e+02, 1.88606343e+01,
- 2.22374631e+05, 9.48896242e+02, 2.56032992e+01,
- 7.15420610e+04, 1.16368668e+03, 7.36926220e+01,
- 6.46185002e+04, 1.38351571e+03, 8.84068589e+01,
- 8.02610692e+04, 1.61800918e+03, 5.50063439e+01,
- 6.00904050e+03, 2.55138106e-03])
- # Movello di fitting
- model = CompositeModel(
- Model(gauss,
- Parameter(value=startPars[0], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[1], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[2], bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=startPars[3], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[4], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[5], bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=startPars[6], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[7], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[8], bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=startPars[9], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[10], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[11], bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=startPars[12], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[13], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[14], bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=startPars[15], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[16], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[17], bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- Model(gauss,
- Parameter(value=startPars[18], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[19], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[20], bounds=(0, 100), label='sigma'),
- label='gaussiana 7'),
- Model(gauss,
- Parameter(value=startPars[21], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[22], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[23], bounds=(0, 100), label='sigma'),
- label='gaussiana 8'),
- Model(gauss,
- Parameter(value=startPars[24], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[25], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[26], bounds=(0, 100), label='sigma'),
- label='gaussiana 9'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=startPars[27], bounds=(0, 1e5), label='a'),
- Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- # Disegno la curva da muovere
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- # Mostro la figura
- fig
- # Ridimensiono gli assi per fare spazio ai cursori
- ax.set_position([0.10, 0.30, 0.84, 0.62])
- # Chiamo ciò che fa la magia
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect),
- sigma=np.sqrt(yVect));
- #%%
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_54 = model.summary()
- Riassunto54 = np.array(Riassunto_54)
- #%% 55 - Fatto OK
- # Nota, ho alzato il bin150->200, ora converge
- # Carico i dati
- numRun = 55
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- # Costruisco l'istogramma e trovo il centro
- h, bins = np.histogram(dati, bins=200)
- binc = bins[:-1] + (bins[1] - bins[0])
- # Creo figura e assi su cui disegnare
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 750V - Gain: 200 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Seleziono e Plotto i dati da fittare
- cond = (binc<2803) & (binc>243)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- # Starting points: inseriti copiando quelli di convergenza
- startPars = np.array([
- 3.27007341e+05, 3.13976549e+02, 1.51769090e+01,
- 1.10288407e+05, 5.66753954e+02, 2.90578040e+01,
- 1.16014769e+05, 6.98831507e+02, 2.36358556e+01,
- 2.39377275e+05, 8.23293555e+02, 2.62860390e+01,
- 3.79262612e+05, 9.53982266e+02, 2.88812872e+01,
- 2.18900196e+05, 1.53509437e+03, 4.27045957e+01,
- 1.04806678e+05, 1.88950564e+03, 1.57225121e+02,
- 7.48170187e+04, 2.27747309e+03, 1.51051278e+02,
- 8.90622408e+04, 2.65905490e+03, 9.61389581e+01,
- 6.20122878e+03, 2.03132197e-03])
- # Movello di fitting
- model = CompositeModel(
- Model(gauss,
- Parameter(value=startPars[0], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[1], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[2], bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=startPars[3], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[4], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[5], bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=startPars[6], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[7], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[8], bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=startPars[9], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[10], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[11], bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=startPars[12], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[13], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[14], bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=startPars[15], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[16], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[17], bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- Model(gauss,
- Parameter(value=startPars[18], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[19], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[20], bounds=(0, 100), label='sigma'),
- label='gaussiana 7'),
- Model(gauss,
- Parameter(value=startPars[21], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[22], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[23], bounds=(0, 100), label='sigma'),
- label='gaussiana 8'),
- Model(gauss,
- Parameter(value=startPars[24], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[25], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[26], bounds=(0, 100), label='sigma'),
- label='gaussiana 9'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=startPars[27], bounds=(0, 1e5), label='a'),
- Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- # Disegno la curva da muovere
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- # Mostro la figura
- fig
- # Ridimensiono gli assi per fare spazio ai cursori
- ax.set_position([0.10, 0.30, 0.84, 0.62])
- # Chiamo ciò che fa la magia
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect),
- sigma=np.sqrt(yVect));
- #%%
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_55 = model.summary()
- Riassunto55 = np.array(Riassunto_55)
- #%% 56 - Fatto OK
- # Nota, ho alzato il bin150->200, ora converge
- # Carico i dati
- numRun = 56
- dati = listaMatrici[myDict[numRun]][:,1]
- dati = dati[dati<4095]
- # Costruisco l'istogramma e trovo il centro
- h, bins = np.histogram(dati, bins=200)
- binc = bins[:-1] + (bins[1] - bins[0])
- # Creo figura e assi su cui disegnare
- fig = plt.figure()
- fig.set_size_inches(12,5)
- fig.suptitle("226Ra - 800V - Gain: 100 ", fontsize=16)
- ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
- ax.set_yscale("log")
- ax.grid(True)
- ax.set_xlabel("ADC", fontsize=14)
- ax.set_ylabel("Entries", fontsize=14)
- # Plotto tutti i dati
- ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
- # Seleziono e Plotto i dati da fittare
- cond = (binc<2243) & (binc>213)
- xVect = binc[cond]
- yVect = h[cond]
- data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
- ds="steps-mid", c="tab:green")
- # Starting points: inseriti copiando quelli di convergenza
- startPars = np.array([
- 3.41057648e+05, 2.74009366e+02, 1.21576501e+01,
- 9.65121696e+04, 4.77133343e+02, 1.87943137e+01,
- 1.23293444e+05, 5.84143244e+02, 1.98466608e+01,
- 2.36748059e+05, 6.82714027e+02, 2.20560395e+01,
- 3.80932808e+05, 7.88170951e+02, 2.36810707e+01,
- 2.29361831e+05, 1.25312868e+03, 3.60282529e+01,
- 9.47249003e+04, 1.53170346e+03, 1.09290881e+02,
- 8.10669238e+04, 1.83305278e+03, 1.16567200e+02,
- 8.98130756e+04, 2.13912681e+03, 7.72823389e+01,
- 8.22077398e+03, 2.52499607e-03])
- # Movello di fitting
- model = CompositeModel(
- Model(gauss,
- Parameter(value=startPars[0], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[1], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[2], bounds=(0, 100), label='sigma'),
- label='gaussiana 1'),
- Model(gauss,
- Parameter(value=startPars[3], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[4], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[5], bounds=(0, 100), label='sigma'),
- label='gaussiana 2'),
- Model(gauss,
- Parameter(value=startPars[6], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[7], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[8], bounds=(0, 100), label='sigma'),
- label='gaussiana 3'),
- Model(gauss,
- Parameter(value=startPars[9], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[10], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[11], bounds=(0, 100), label='sigma'),
- label='gaussiana 4'),
- Model(gauss,
- Parameter(value=startPars[12], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[13], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[14], bounds=(0, 100), label='sigma'),
- label='gaussiana 5'),
- Model(gauss,
- Parameter(value=startPars[15], bounds=(1e5, 3e6), label='A'),
- Parameter(value=startPars[16], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[17], bounds=(0, 100), label='sigma'),
- label='gaussiana 6'),
- Model(gauss,
- Parameter(value=startPars[18], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[19], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[20], bounds=(0, 100), label='sigma'),
- label='gaussiana 7'),
- Model(gauss,
- Parameter(value=startPars[21], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[22], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[23], bounds=(0, 100), label='sigma'),
- label='gaussiana 8'),
- Model(gauss,
- Parameter(value=startPars[24], bounds=(1e4, 3e6), label='A'),
- Parameter(value=startPars[25], bounds=(0, 4095), label='mu'),
- Parameter(value=startPars[26], bounds=(0, 100), label='sigma'),
- label='gaussiana 9'),
- # Model(line,
- # Parameter(value=-4.55851, bounds=(-10, 10), label='m'),
- # Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
- # label='retta'),
- Model(exp,
- Parameter(value=startPars[27], bounds=(0, 1e5), label='a'),
- Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
- label='exp'),
- label='gaussian_peaks')
- # Disegno la curva da muovere
- xsample = np.linspace(0, 4095, 1500)
- model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
- label='Curva fittata')
- ax.legend();
- # Mostro la figura
- fig
- # Ridimensiono gli assi per fare spazio ai cursori
- ax.set_position([0.10, 0.30, 0.84, 0.62])
- # Chiamo ciò che fa la magia
- gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
- slider_options={'color': 'steelblue'}, data=(xVect, yVect),
- sigma=np.sqrt(yVect));
- #%%
- # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
- # è facilmente castabile in un array di numpy
- Riassunto_56 = model.summary()
- Riassunto56 = np.array(Riassunto_56)
- #%% Esporto i dati
- np.savez("Dati", rias52 = Riassunto52, rias53 = Riassunto53, \
- rias54 = Riassunto54, rias55 = Riassunto55, \
- rias56 = Riassunto56, )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement