Stex6299

AutoGUI - Use

Apr 27th, 2021 (edited)
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.16 KB | None | 0 0
  1. #%% 52 nuovo ufficiale OK
  2. """
  3. Nota bene: ho modificato il file modeling.py per aggiungere gli errori
  4.  
  5. 1. Ho ridefinito i parametri dell'init facendogli accettare le sigma
  6.  
  7. def __init__(self, model: Model, graphs: List[mpl.lines.Line2D]=None, figure: mpl.figure.Figure=None,
  8.             bbox: List[float]=[0, 0, 1, 1], background: Union[bool,str]=None, border: bool=False,
  9.             radio_options: Dict[str, Any]=None, slider_options: Dict[str, Any]=None,
  10.             data: Tuple[np.ndarray, np.ndarray]=None, sigma: np.ndarray=None):
  11.  
  12.  
  13. 2. ho ridefinito una parte dell'init per salvarsi le sigma
  14. ...
  15. self.slider_options = slider_options
  16. self.data = data
  17. self.sigma = sigma
  18. ...
  19.  
  20.  
  21. 3. Ho modificato nel metodo __fit_button_on_clicked la chiamata a fit
  22. ...
  23. self.model.fit(*self.data, sigma=self.sigma)
  24. ...
  25.  
  26.  
  27. """
  28.  
  29. # Nota, ho alzato il bin150->200, ora converge
  30.  
  31. # Carico i dati
  32. numRun = 52
  33. dati = listaMatrici[myDict[numRun]][:,1]
  34. dati = dati[dati<4095]
  35.  
  36.  
  37. # Costruisco l'istogramma e trovo il centro
  38. h, bins = np.histogram(dati, bins=200)
  39. binc = bins[:-1] + (bins[1] - bins[0])
  40.    
  41.    
  42. # Creo figura e assi su cui disegnare
  43. fig = plt.figure()
  44. fig.set_size_inches(12,5)
  45. fig.suptitle("226Ra - 600V - Gain: 1000 ", fontsize=16)
  46.  
  47. ax = fig.add_axes([0.15, 0.14, 0.84, 0.70])
  48. ax.set_yscale("log")
  49. ax.grid(True)
  50. ax.set_xlabel("ADC", fontsize=14)
  51. ax.set_ylabel("Entries", fontsize=14)
  52.  
  53.  
  54.  
  55. # Plotto tutti i dati
  56. ax.plot(binc, h, color='black', lw=1, label='Dati completi', ds="steps-mid")
  57.  
  58.  
  59. # Seleziono e Plotto i dati da fittare
  60. cond = (binc<2633) & (binc>243)
  61. xVect = binc[cond]
  62. yVect = h[cond]
  63.  
  64. data_graph, = ax.plot(xVect, yVect, lw=1, label='Dati per fit',\
  65.                       ds="steps-mid", c="tab:green")
  66.  
  67.  
  68.    
  69. # Starting points: inseriti copiando quelli di convergenza
  70. startPars = np.array([
  71.        3.14020187e+05, 2.98589322e+02, 1.43257226e+01,
  72.        9.41411082e+04, 5.34214983e+02, 2.02581202e+01,
  73.        1.04459955e+05, 6.51821651e+02, 2.23514168e+01,
  74.        
  75.        2.30961972e+05, 7.65474019e+02, 2.49634128e+01,
  76.        3.65195534e+05, 8.86502718e+02, 2.82249031e+01,
  77.        2.14699579e+05, 1.42224403e+03, 4.12398651e+01,
  78.        
  79.        1.13048417e+05, 1.76150564e+03, 1.49847505e+02,
  80.        6.24648382e+04, 2.11018949e+03, 1.12551885e+02,
  81.        9.82593192e+04, 2.47588684e+03, 1.06711679e+02,
  82.        
  83.        7.81582354e+03, 2.32745796e-03])
  84.  
  85.  
  86. # Movello di fitting
  87. model = CompositeModel(
  88.     Model(gauss,
  89.           Parameter(value=startPars[0], bounds=(1e5, 3e6),      label='A'),
  90.           Parameter(value=startPars[1],   bounds=(0, 4095),   label='mu'),
  91.           Parameter(value=startPars[2],   bounds=(0, 100), label='sigma'),
  92.           label='gaussiana 1'),
  93.     Model(gauss,
  94.           Parameter(value=startPars[3], bounds=(1e5, 3e6),      label='A'),
  95.           Parameter(value=startPars[4],   bounds=(0, 4095),   label='mu'),
  96.           Parameter(value=startPars[5],   bounds=(0, 100), label='sigma'),
  97.           label='gaussiana 2'),
  98.     Model(gauss,
  99.           Parameter(value=startPars[6], bounds=(1e5, 3e6),      label='A'),
  100.           Parameter(value=startPars[7],   bounds=(0, 4095),   label='mu'),
  101.           Parameter(value=startPars[8],   bounds=(0, 100), label='sigma'),
  102.           label='gaussiana 3'),
  103.    
  104.     Model(gauss,
  105.           Parameter(value=startPars[9], bounds=(1e5, 3e6),      label='A'),
  106.           Parameter(value=startPars[10],   bounds=(0, 4095),   label='mu'),
  107.           Parameter(value=startPars[11],   bounds=(0, 100), label='sigma'),
  108.           label='gaussiana 4'),
  109.     Model(gauss,
  110.           Parameter(value=startPars[12], bounds=(1e5, 3e6),      label='A'),
  111.           Parameter(value=startPars[13],   bounds=(0, 4095),   label='mu'),
  112.           Parameter(value=startPars[14],   bounds=(0, 100), label='sigma'),
  113.           label='gaussiana 5'),
  114.     Model(gauss,
  115.           Parameter(value=startPars[15], bounds=(1e5, 3e6),      label='A'),
  116.           Parameter(value=startPars[16],   bounds=(0, 4095),   label='mu'),
  117.           Parameter(value=startPars[17],   bounds=(0, 100), label='sigma'),
  118.           label='gaussiana 6'),
  119.    
  120.     Model(gauss,
  121.           Parameter(value=startPars[18], bounds=(1e4, 3e6),      label='A'),
  122.           Parameter(value=startPars[19],   bounds=(0, 4095),   label='mu'),
  123.           Parameter(value=startPars[20],   bounds=(0, 100), label='sigma'),
  124.           label='gaussiana 7'),
  125.     Model(gauss,
  126.           Parameter(value=startPars[21], bounds=(1e4, 3e6),      label='A'),
  127.           Parameter(value=startPars[22],   bounds=(0, 4095),   label='mu'),
  128.           Parameter(value=startPars[23],   bounds=(0, 100), label='sigma'),
  129.           label='gaussiana 8'),
  130.     Model(gauss,
  131.           Parameter(value=startPars[24], bounds=(1e4, 3e6),      label='A'),
  132.           Parameter(value=startPars[25],   bounds=(0, 4095),   label='mu'),
  133.           Parameter(value=startPars[26],   bounds=(0, 100), label='sigma'),
  134.           label='gaussiana 9'),
  135.  
  136. #    Model(line,
  137. #          Parameter(value=-4.55851, bounds=(-10, 10),  label='m'),
  138. #          Parameter(value=5881.62, bounds=(-100, 10000), label='q'),
  139. #          label='retta'),
  140.     Model(exp,
  141.           Parameter(value=startPars[27], bounds=(0, 1e5),  label='a'),
  142.           Parameter(value=startPars[28], bounds=(0, 1e-2), label='k'),
  143.           label='exp'),
  144.     label='gaussian_peaks')
  145.  
  146.  
  147. # Disegno la curva da muovere
  148. xsample = np.linspace(0, 4095, 1500)
  149. model_graph, = ax.plot(xsample, model(xsample), color='steelblue', \
  150.                        label='Curva fittata')
  151. ax.legend();
  152.  
  153.  
  154. # Mostro la figura
  155. fig
  156.  
  157.  
  158. # Ridimensiono gli assi per fare spazio ai cursori
  159. ax.set_position([0.10, 0.30, 0.84, 0.62])
  160.  
  161. # Chiamo ciò che fa la magia
  162. gui = AutoGUI(model, [model_graph], bbox=[0.20, 0.07, 0.75, 0.16], figure=fig,
  163.               slider_options={'color': 'steelblue'}, data=(xVect, yVect),
  164.               sigma=np.sqrt(yVect));
  165.  
  166. #%%
  167. # Eseguire a mano dopo aver premuto il pulsantone ed ispezionare a mano
  168. # è facilmente castabile in un array di numpy
  169. Riassunto_52 = model.summary()
  170. Riassunto52 = np.array(Riassunto_52)
  171.  
  172. if Export: pass
  173.     #plt.savefig(r'../RELAZIONE/FIGURE/risoluzione-52.eps', format='eps')
  174. #plt.show()
  175.  
Add Comment
Please, Sign In to add comment