"resources/myWidgets.py" did not exist on "fe18b57321e31db92d9f346aef5cbeac973ab168"
Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import numpy as np
#import matplotlib.pyplot as plt
import sys
from datetime import datetime
from artiq.experiment import *
class ContinuousCountsHistograms(EnvExperiment):
"""
Histogramas prueba
Codigo de recoleccion de lecturas de cuentas del PMT.
Recolecta N mediciones de x segundos del PMT y las muestra en un grafico.
Sirve para realizar checks rapidos tipo verificacion del PMT.
CONECCIONES:
============
TTL0 input <- PMT
USO:
====
Correr la siguiente linea, definiendo el estado del led/laser como apagado 'led=0' o
prendido, 'led=1'
artiq_run lectura_referencia_pmt.py led={0,1}
PARAMETROS:
===========
self.estado_inicial <- Determina si la medicion se hara con el led prendido (1) o apagado (0)
SALIDA:
=======
Histograma de cuentas registradas.
Prompt para guardar las mediciones obtenidas.
"""
# def prepare(self):
#pongo parametros de medicion
# self.setattr_argument("nro_meds", NumberValue(50)) #mide 50 veces
# self.setattr_argument("window", NumberValue(50, unit='ms', scale=1e-3)) #ventanas de 50 ms
# self.nro_meds = 1000 # Cantidad de repeticiones a hacer
# self.tau_med = 1*s # Tiempo de cada medicion
# self.t_between = 500 * us # Tiempo entre mediciones (minimo 500us?)
def build(self):
# Defino los conectores a utilizar
#self.setattr_argument("nro_meds", NumberValue(50)) #mide 50 veces
self.nro_meds = 50
self.setattr_argument("window", NumberValue(50, unit='ms', scale=1)) #ventanas de 50 ms
self.setattr_device("core")
self.pmt = self.get_device("ttl0")
self.setattr_device("ccb")
@kernel
def run(self):
self.core.reset()
self.pmt.input()
# Pre-aloco el dataset, total ya se cuan largo va a ser.
self.set_dataset('ticks', np.full(self.nro_meds, np.nan), broadcast=True, archive=False)
Nicolas Nunez Barreto
committed
delay(100*ms) # agrego el delay necesario despues del input para no tener un underflow
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
t0 = now_mu() # guardo el tiempo de comienzo de la medicion
try:
for i in range(self.nro_meds): # corro 1000 veces
# Cuento solamente los rising edges en el intervalo
# modifico el i-esimo elemento del dataset con las cuentas
self.mutate_dataset('ticks', i, self.pmt.count(self.pmt.gate_rising(self.window)))
# Aqui probablemente tenga que poner un delay
#1self.core.break_realtime() #esto no se si esta bueno o hay que corregirlo
delay(self.window) #esto es para que mida por ventanas?
print('done')
except Exception as err:
print("Tiempo de error: ", end='')
print(self.core.mu_to_seconds(now_mu()-t0))
print("Iteracion nro: ", end='')
print(i)
self.core.break_realtime() # uso esto para asegurarme que corra la siguiente linea
raise err
print(self.core.mu_to_seconds(now_mu()-t0))
# def analyze(self):
# """
# Aprovecho la existencia de este metodo que llama el mismo programa
# para guardar los archivos que vayamos recolectando
# """
#
# # traigo el dataset para guardarlo
# ticks_med = self.get_dataset('ticks')
#
# # Armo el plot
# fig, ax = plt.subplots()
# ax.hist(ticks_med)
# ax.set_title(f"Histograma de cuentas/seg. Led {estado}")
# ax.set_xlabel("cuentas")
# ax.set_ylabel("ocurrencias")
# fig.tight_layout()
# fig.show()
#
# if input("Guardar datos? (y/[n]): ") in ("y", "Y"):
# folder = "mediciones/" #TODO: Eleccion para el usuario?
# realtime = datetime.now().strftime("%Y%m%d_%H%M%S") # Tiempo de ejecucion
# fname = f"{folder}{realtime}_{estado}_tmed{self.tau_med}_ticks.txt"
# print(f"Guardando: {fname}")
# np.savetxt(fname, ticks_med, delimiter=',', \
#-+ header=f"no_meds={self.nro_meds},tau_med={self.tau_med},estado={estado}")