Newer
Older
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
#from artiq.coredevice.ad9910 import PHASE_MODE_ABSOLUTE
import time
import numpy as np
class IR_Saturation(EnvExperiment):
"""Saturation measurement of the DP transition"""
def build(self):
# Agrego kernel invariants a ver si mejoro algo de la performance
kernel_invariants = getattr(self, 'kernel_invariants', set())
self.kernel_invariants = kernel_invariants | {"no_measures", "t_cool", "IR_Freqs", "t_trans", "t_readout"}
self.setattr_device("core")
self.setattr_device("ccb")
self.pmt = self.get_device("ttl0")
self.laserUV = UrukulCh(self, ch=2, freq=110.0, amp=0.3, name="UV") #corresponde a 0.7 Vpp
self.laserIR = UrukulCh(self, ch=1, freq=208.0, amp=0.35, name="IR") #corresponde a 0.8 Vpp
self.setattr_argument(f"IR_freq",
NumberValue(208*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Experiment params")
self.setattr_argument(f"UV_freq",
NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Experiment params")
self.setattr_argument(f"UV_amp",
NumberValue(0.15, min=0.0, max=0.3),
"Experiment params")
self.setattr_argument(f"IR_final_freq",
NumberValue(211*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Final params")
self.setattr_argument(f"IR_final_amp",
NumberValue(0.12, min=0.0, max=0.35),
"Final params")
self.setattr_argument(f"UV_final_freq",
NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Final params")
self.setattr_argument(f"UV_final_amp",
NumberValue(0.3, min=0.0, max=0.3),
"Final params")
53
54
55
56
57
58
59
60
61
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
self.setattr_argument(f"t_readout",
NumberValue(200*ms, unit='ms', scale=ms, min=1*ms),
"Experiment params")
self.setattr_argument(f"t_wait",
NumberValue(50*us, unit='us', scale=us, min=1*us),
"Experiment params")
self.setattr_argument("Comments", StringValue(" "), "General comments")
self.setattr_argument("IR_amps", Scannable(
default=CenterScan(0., 0.3, 0.01),
global_min = 0.,
global_max = 0.35
)
)
@rpc
def create_datasets(self):
self.set_dataset("measurements_IR_sat", np.zeros(len(self.IR_amps.sequence), dtype=int), broadcast=True, archive=True)
self.set_dataset("IR_amps", self.IR_amps.sequence, broadcast=True, archive=True)
self.set_dataset("t_readout", self.t_readout, broadcast=False, archive=True)
self.set_dataset("Comments", self.Comments, broadcast=False, archive=True)
#self.set_dataset("calibration", self.get_dataset())
self.laserIR.generate_dataset()
self.laserUV.generate_dataset()
@rpc(flags={"async"})
def create_applets(self):
self.ccb.issue("create_applet", "SaturationIR",
"${python} -m pyLIAF.artiq.applets.plot_xy "
"measurements_IR_sat "
"--x IR_amps")
@kernel
def run(self):
t_cool_mu = self.core.seconds_to_mu(self.t_wait) # Precomputo esto para despues
cuentas = 0
self.create_datasets()
self.create_applets()
self.init_kernel()
delay(1*ms)
self.laserUV.select_profile(1)
self.laserIR.select_profile(1)
delay(500*us)
self.laserIR.on()
self.laserUV.on()
self.laserIR.set_frequency(self.IR_freq, 0.35, profile=1)
self.laserUV.set_frequency(self.UV_freq, self.UV_amp, profile=1)
save_index = 0
for amp in self.IR_amps.sequence:
at_mu(self.core.get_rtio_counter_mu()) # espero lo que haya que esperar por el mutate
delay(1*ms) # Agrego unos forros 200us porque si no no anda
self.laserIR.set_frequency(self.IR_freq, amp, profile=1) # Cambio la frec del perfil 1 (estoy en el 0)
delay(100*us)
cuentas_ON = self.readout() # Hago la medicion y vuelvo con las cuentas
delay(100*us)
delay(100*us)
cuentas_OFF = self.readout() # Hago la medicion y vuelvo con las cuentas
#counts = cuentas_ON-cuentas_OFF
counts = 0.5*(cuentas_ON+cuentas_OFF)
#print(counts)
self.mutate_dataset("measurements_IR_sat", save_index, counts)
self.laserIR.on()
save_index = save_index + 1
delay(500*us)
self.laserUV.set_frequency(self.UV_final_freq, self.UV_final_amp)
self.laserIR.set_frequency(self.IR_final_freq, self.IR_final_amp)
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
print("jose maria listorti")
@kernel
def init_kernel(self):
self.core.reset()
self.pmt.input()
#self.laserUV.initialize_channel()
#self.laserIR.initialize_channel()
# Seteo los perfiles 0 y 1 con los mismos valores
# el 0 va a ser la referencia, el 1 va a ser el que se mueve
delay(1000*us)
self.laserIR.set_channel()
self.laserUV.set_channel()
# Me aseguro que todo termine antes de seguir
self.core.break_realtime()
self.core.wait_until_mu(now_mu())
@kernel
def readout(self) -> TInt64:
"""Registro de cuentas emitidas"""
#delay(self.t_trans)
here = self.pmt.gate_rising(self.t_readout) # Que mida durante t_readout
return self.pmt.count(here) # recupero las cuentas medidas