Commit 2ece90ae authored by Muriel Bonetto's avatar Muriel Bonetto

Merge branch 'master' of https://code.df.uba.ar/nnunez/artiq_experiments...

Merge branch 'master' of https://code.df.uba.ar/nnunez/artiq_experiments porque habia hecho unas cosas en mi compu y quedo desactualizado con las mediciones de hoy (era en simultaneo)
parents ee35edaf 0b1081a9
aiohttp
aiohttp-3.6.2.dist-info
artiq
artiq-5.7158.beb49d4d.dist-info
artiq_comtools
artiq_comtools-1.0.dist-info
async_timeout
async_timeout-3.0.1.dist-info
attr
attrs-19.3.0.dist-info
backcall
backcall-0.1.0.dist-info
beautifulsoup4-4.8.2.dist-info
bottleneck
Bottleneck-1.3.1.dist-info
bs4
cffi
cffi-1.13.2.dist-info
_cffi_backend.cpython-37m-x86_64-linux-gnu.so
chardet
chardet-3.0.4.dist-info
dateutil
dbus
_dbus_bindings.la
_dbus_bindings.so
_dbus_glib_bindings.la
_dbus_glib_bindings.so
decorator-4.4.1.dist-info
decorator.py
docutils
docutils-0.16.dist-info
easy-install.pth
easy_install.py
et_xmlfile
et_xmlfile-1.0.1.dist-info
h5py
h5py-2.9.0.dist-info
html5lib
html5lib-1.0.1.dist-info
idna
idna-2.8.dist-info
importlib_metadata
importlib_metadata-1.3.0.dist-info
IPython
ipython-7.12.0.dist-info
ipython_genutils
ipython_genutils-0.2.0.dist-info
jdcal-1.4.1.dist-info
jdcal.py
jedi
jedi-0.15.2.dist-info
Levenshtein
llvmlite_artiq
llvmlite_artiq-0+unknown.dist-info
lxml
lxml-4.4.2.dist-info
mock
mock-3.0.5.dist-info
more_itertools
more_itertools-8.0.2.dist-info
multidict
multidict-4.7.4.dist-info
numexpr
numexpr-2.7.1.dist-info
numpy
numpy-1.18.1.dist-info
olefile
olefile-0.46.dist-info
OpenGL
openpyxl
openpyxl-3.0.2.dist-info
pandas
pandas-1.0.1.dist-info
parso
parso-0.5.2.dist-info
path
path.py-12.0.1.dist-info
pbr
pbr-5.4.4.dist-info
pexpect
pexpect-4.7.0.dist-info
pickleshare-0.7.5.dist-info
pickleshare.py
PIL
Pillow-6.2.1.dist-info
pkg_resources
prettytable-0.7.2.dist-info
prettytable.py
prompt_toolkit
prompt_toolkit-2.0.10.dist-info
ptyprocess
ptyprocess-0.6.0.dist-info
__pycache__
pycparser
pycparser-2.19.dist-info
pygit2
pygit2-0.27.2.dist-info
_pygit2.cpython-37m-x86_64-linux-gnu.so
pygments
Pygments-2.5.2.dist-info
pyLIAF.egg-link
PyOpenGL-3.1.4.dist-info
PyQt5
PyQt5-5.13.0.dist-info
PyQt5_sip-4.19.18.dist-info
pyqtgraph
pyqtgraph-0.11.0.dist-info
pyserial-3.4.dist-info
python_dateutil-2.8.1.dist-info
python_Levenshtein-0.12.0.dist-info
pythonparser
pythonparser-1.1.dist-info
pytz
pytz-2019.3.dist-info
quamash
Quamash-0.6.1.dist-info
README.txt
regex
regex-2019.12.20.dist-info
scipy
scipy-1.4.1.dist-info
serial
setuptools
setuptools-44.0.0.post20200709.dist-info
setuptools_scm
setuptools_scm-3.4.3.dist-info
sipconfig.py
sipdistutils.py
sipyco
sipyco-1.2.dist-info
sitecustomize.py
six-1.14.0.dist-info
six.py
soupsieve
soupsieve-1.9.5.dist-info
sqlalchemy
SQLAlchemy-1.3.13.dist-info
tables
tables-3.6.1.dist-info
traitlets
traitlets-4.3.3.dist-info
wcwidth
wcwidth-0.1.7.dist-info
webencodings
webencodings-0.5.1.dist-info
xlrd
xlrd-1.2.0.dist-info
xlwt
xlwt-1.3.0.dist-info
yarl
yarl-1.4.2.dist-info
zipp-0.6.0.dist-info
zipp.py
aiohttp
aiohttp-3.6.2.dist-info
artiq
artiq-5.7158.beb49d4d.dist-info
artiq_comtools
artiq_comtools-1.0.dist-info
async_timeout
async_timeout-3.0.1.dist-info
attr
attrs-19.3.0.dist-info
backcall
backcall-0.1.0.dist-info
beautifulsoup4-4.8.2.dist-info
bottleneck
Bottleneck-1.3.1.dist-info
bs4
certifi
certifi-2019.11.28.dist-info
cffi
cffi-1.13.2.dist-info
_cffi_backend.cpython-37m-x86_64-linux-gnu.so
chardet
chardet-3.0.4.dist-info
cryptography
cryptography-2.8.dist-info
dateutil
dbus
_dbus_bindings.la
_dbus_bindings.so
_dbus_glib_bindings.la
_dbus_glib_bindings.so
decorator-4.4.1.dist-info
decorator.py
docutils
docutils-0.16.dist-info
easy_install.py
et_xmlfile
et_xmlfile-1.0.1.dist-info
h5py
h5py-2.9.0.dist-info
html5lib
html5lib-1.0.1.dist-info
idna
idna-2.8.dist-info
importlib_metadata
importlib_metadata-1.3.0.dist-info
IPython
ipython-7.12.0.dist-info
ipython_genutils
ipython_genutils-0.2.0.dist-info
jdcal-1.4.1.dist-info
jdcal.py
jedi
jedi-0.15.2.dist-info
Levenshtein
llvmlite_artiq
llvmlite_artiq-0+unknown.dist-info
lxml
lxml-4.4.2.dist-info
mock
mock-3.0.5.dist-info
more_itertools
more_itertools-8.0.2.dist-info
multidict
multidict-4.7.4.dist-info
numexpr
numexpr-2.7.1.dist-info
numpy
numpy-1.18.1.dist-info
olefile
olefile-0.46.dist-info
OpenGL
openpyxl
openpyxl-3.0.2.dist-info
OpenSSL
packaging
packaging-20.1.dist-info
pandas
pandas-1.0.1.dist-info
parso
parso-0.5.2.dist-info
path
path.py-12.0.1.dist-info
pbr
pbr-5.4.4.dist-info
pexpect
pexpect-4.7.0.dist-info
pickleshare-0.7.5.dist-info
pickleshare.py
PIL
Pillow-6.2.1.dist-info
pkg_resources
prettytable-0.7.2.dist-info
prettytable.py
prompt_toolkit
prompt_toolkit-2.0.10.dist-info
ptyprocess
ptyprocess-0.6.0.dist-info
pyasn1
pyasn1-0.4.8.dist-info
__pycache__
pycparser
pycparser-2.19.dist-info
pygit2
pygit2-0.27.2.dist-info
_pygit2.cpython-37m-x86_64-linux-gnu.so
pygments
Pygments-2.5.2.dist-info
pyLIAF.egg-link
PyOpenGL-3.1.4.dist-info
pyOpenSSL-19.1.0.dist-info
pyparsing-2.4.6.dist-info
pyparsing.py
PyQt5
PyQt5-5.13.0.dist-info
PyQt5_sip-4.19.18.dist-info
pyqtgraph
pyqtgraph-0.11.0.dist-info
pyserial-3.4.dist-info
PySocks-1.7.1.dist-info
python_dateutil-2.8.1.dist-info
python_Levenshtein-0.12.0.dist-info
pythonparser
pythonparser-1.1.dist-info
pytz
pytz-2019.3.dist-info
quamash
Quamash-0.6.1.dist-info
README.txt
regex
regex-2019.12.20.dist-info
requests
requests-2.22.0.dist-info
scipy
scipy-1.4.1.dist-info
serial
setuptools
setuptools-44.0.0.post20200709.dist-info
setuptools_scm
setuptools_scm-3.4.3.dist-info
sipconfig.py
sipdistutils.py
sipyco
sipyco-1.2.dist-info
sitecustomize.py
six-1.14.0.dist-info
six.py
sockshandler.py
socks.py
soupsieve
soupsieve-1.9.5.dist-info
sqlalchemy
SQLAlchemy-1.3.13.dist-info
tables
tables-3.6.1.dist-info
traitlets
traitlets-4.3.3.dist-info
urllib3
urllib3-1.25.8.dist-info
wcwidth
wcwidth-0.1.7.dist-info
webencodings
webencodings-0.5.1.dist-info
xlrd
xlrd-1.2.0.dist-info
xlwt
xlwt-1.3.0.dist-info
yarl
yarl-1.4.2.dist-info
zipp-0.6.0.dist-info
zipp.py
...@@ -53,7 +53,7 @@ import scipy.fftpack ...@@ -53,7 +53,7 @@ import scipy.fftpack
BINW = 1e-2 BINW = 1e-2
T0 = -0.4e-6 T0 = -0.4e-6
files = [22805] files = [23173]
SP_Heigths = [] SP_Heigths = []
SP_Bins = [] SP_Bins = []
......
...@@ -92,7 +92,7 @@ T0 = -0.4e-6 ...@@ -92,7 +92,7 @@ T0 = -0.4e-6
#files = [20577,20578,20579,20580,20581] #el 19613 es el que muestra el pico en 48.5 Hz #files = [20577,20578,20579,20580,20581] #el 19613 es el que muestra el pico en 48.5 Hz
files = [22809,22813,22817,22818,22819,22820] files = [22809,22813,22817,22818,22819,22820]
files = [22838] files = [23113]
def bin_time_arrivals(arrival_times, tau): def bin_time_arrivals(arrival_times, tau):
""" """
...@@ -134,8 +134,8 @@ for i, fname in enumerate(files): ...@@ -134,8 +134,8 @@ for i, fname in enumerate(files):
Amplitud en funcion de la frecuencia de bineo de la rf Amplitud en funcion de la frecuencia de bineo de la rf
""" """
freqrf = 7.186226e6 freqrf =553e3+70
freqrfvec = np.arange(-4,4,0.01) + freqrf freqrfvec = np.arange(-5,5,0.01) + freqrf
amps = [] amps = []
...@@ -170,6 +170,11 @@ plt.ylabel('Amplitud oscilacion') ...@@ -170,6 +170,11 @@ plt.ylabel('Amplitud oscilacion')
#plt.axvline(7262766.13*1e-6,linewidth=4,color='red',linestyle='dashed') #plt.axvline(7262766.13*1e-6,linewidth=4,color='red',linestyle='dashed')
#%% #%%
S = np.mean(np.exp(1j* freqrf* 2*np.pi*counts))
#%%
""" """
Grafico temporal replicado 3 veces a la frecuencia dada Grafico temporal replicado 3 veces a la frecuencia dada
""" """
......
...@@ -21,7 +21,7 @@ class IR_Scan_simple(EnvExperiment): ...@@ -21,7 +21,7 @@ class IR_Scan_simple(EnvExperiment):
self.laserUV = UrukulCh(self, ch=2, freq=110.0, amp=0.3, name="UV") #corresponde a 0.7 Vpp self.laserUV = UrukulCh(self, ch=2, freq=110.0, amp=0.3, name="UV") #corresponde a 0.7 Vpp
self.laserIR1 = UrukulCh(self, ch=1, freq=208.0, amp=0.35, name="IR1") #corresponde a 0.8 Vpp self.laserIR1 = UrukulCh(self, ch=1, freq=208.0, amp=0.35, name="IR1") #corresponde a 0.8 Vpp
self.laserIR2 = UrukulCh(self, ch=3, freq=80.0, amp=0.2, name="IR2") #corresponde a 0.8 Vpp self.laserIR2 = UrukulCh(self, ch=3, freq=80.0, amp=0.2, name="IR2") #corresponde a 0.8 Vpp
self.laserIR2shift = UrukulCh(self, ch=0, freq=270.0, amp=0.7, name="IR2shift") #corresponde a 0.8 Vpp self.laserIR2shift = UrukulCh(self, ch=0, freq=215.0, amp=0.5, name="IR2shift") #corresponde a 0.8 Vpp
self.setattr_argument("no_measures", self.setattr_argument("no_measures",
NumberValue(2000, min=1, ndecimals=0, step=1), NumberValue(2000, min=1, ndecimals=0, step=1),
...@@ -202,8 +202,8 @@ class IR_Scan_simple(EnvExperiment): ...@@ -202,8 +202,8 @@ class IR_Scan_simple(EnvExperiment):
finalUV_amp = self.get_dataset("UV_amp") finalUV_amp = self.get_dataset("UV_amp")
finalIR2_freq = self.get_dataset("IR2_freq") finalIR2_freq = self.get_dataset("IR2_freq")
finalIR2_amp = self.get_dataset("IR2_amp") finalIR2_amp = self.get_dataset("IR2_amp")
finalIR2shift_freq = self.get_dataset("IR2shift_freq") #finalIR2shift_freq = self.get_dataset("IR2shift_freq")
finalIR2shift_amp = self.get_dataset("IR2shift_amp") #finalIR2shift_amp = self.get_dataset("IR2shift_amp")
return [finalIR1_freq, finalIR1_amp, finalUV_freq, finalUV_amp, finalIR2_freq, finalIR2_amp, finalIR2shift_freq, finalIR2shift_amp] return [finalIR1_freq, finalIR1_amp, finalUV_freq, finalUV_amp, finalIR2_freq, finalIR2_amp, finalIR2shift_freq, finalIR2shift_amp]
...@@ -267,7 +267,7 @@ class IR_Scan_simple(EnvExperiment): ...@@ -267,7 +267,7 @@ class IR_Scan_simple(EnvExperiment):
self.laserIR1.set_frequency(final[0], final[1], profile=1) self.laserIR1.set_frequency(final[0], final[1], profile=1)
self.laserUV.set_frequency(final[2], final[3], profile=1) self.laserUV.set_frequency(final[2], final[3], profile=1)
self.laserIR2.set_frequency(final[4], final[5], profile=1) self.laserIR2.set_frequency(final[4], final[5], profile=1)
self.laserIR2shift.set_frequency(270*MHz, 0.7, profile=1) self.laserIR2shift.set_frequency(215*MHz, 0.5, profile=1)
print("jose maria listorti") print("jose maria listorti")
...@@ -285,7 +285,7 @@ class IR_Scan_simple(EnvExperiment): ...@@ -285,7 +285,7 @@ class IR_Scan_simple(EnvExperiment):
self.laserIR2.set_channel() self.laserIR2.set_channel()
self.laserIR2shift.set_channel() self.laserIR2shift.set_channel()
self.laserIR1.set_frequency(self.IR1_cooling_freq, self.IR1_cooling_amp, profile=0) self.laserIR1.set_frequency(self.IR1_cooling_freq, self.IR1_cooling_amp, profile=0)
self.laserIR2shift.set_frequency(270*MHz, 0.7, profile=0) self.laserIR2shift.set_frequency(215*MHz, 0.5, profile=0)
self.laserUV.set_frequency(self.UV_cooling_freq, self.UV_cooling_amp, profile=0) self.laserUV.set_frequency(self.UV_cooling_freq, self.UV_cooling_amp, profile=0)
self.laserIR2.set_frequency(self.IR2_cooling_freq, self.IR2_cooling_amp, profile=0) self.laserIR2.set_frequency(self.IR2_cooling_freq, self.IR2_cooling_amp, profile=0)
self.laserIR1.set_channel(profile=1) self.laserIR1.set_channel(profile=1)
...@@ -301,7 +301,7 @@ class IR_Scan_simple(EnvExperiment): ...@@ -301,7 +301,7 @@ class IR_Scan_simple(EnvExperiment):
self.core.break_realtime() self.core.break_realtime()
self.laserIR2.set_frequency(self.IR2_CPT_freq, self.IR2_CPT_amp, profile=1) self.laserIR2.set_frequency(self.IR2_CPT_freq, self.IR2_CPT_amp, profile=1)
self.core.break_realtime() self.core.break_realtime()
self.laserIR2shift.set_frequency(270*MHz, 0.7, profile=1) self.laserIR2shift.set_frequency(215*MHz, 0.5, profile=1)
#self.laserTISA.set_frequency(self.TISA_CPT_freq, 0.035, profile=1) #self.laserTISA.set_frequency(self.TISA_CPT_freq, 0.035, profile=1)
self.core.break_realtime() self.core.break_realtime()
#self.laserIR1.set_channel(profile=2) #self.laserIR1.set_channel(profile=2)
......
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
PORT = 60000
PASS = b'Secr3t Pa55W0rd'
import numpy as np
from scipy.optimize import curve_fit
import time
from multiprocessing.connection import Client
# TODO:
# [ ] Revisar los tiempos
# [ ] Ver por que da overflow intermitentemente en las corrids
# [ ] Ver como esta guardando los resultados y guardar lo que falta
# [ ] Cambiarle los parametros a los laseres cuando arranca el exp
#TCPIP0::192.168.1.250::INSTR nombre del rigol 5252
class FluorescenceCorrelation(EnvExperiment):
"""Fluorescence Secular correlation"""
@rpc
def initialize_tca_com(self):
address = ('localhost', PORT)
self.conn = Client(address, authkey=PASS)
@rpc
def changeFreqRigol(self,freq,cmd='changeFreqRigol'):
self.conn.send(f'{cmd} {freq}')
rta = self.conn.recv()
def build(self):
self.setattr_device("core")
self.setattr_device("ccb") # Para las applets
self.setattr_device("scheduler")
self.pmt = self.get_device("ttl0")
#self.pmt_state = self.get_device("ttl4")
# qué urukul se usa de IR???
self.laserUV = UrukulCh(self, ch=2, freq=110.0, amp=0.3, name="UV") #corresponde a 0.7 Vpp
# ## Borrar -Caro
# self.laserIR1 = UrukulCh(self, ch=1, freq=208.0, amp=0.35, name="IR1") #corresponde a 0.8 Vpp
# self.laserIR2 = UrukulCh(self, ch=3, freq=80.0, amp=0.2, name="IR2") #corresponde a 0.8 Vpp
# self.laserIR2shift = UrukulCh(self, ch=0, freq=270.0, amp=0.7, name="IR2shift") #corresponde a 0.8 Vpp
# ## Fin borrar -Caro
# self.setattr_argument("bin", NumberValue(50e-9, unit='us'), "Binning params")
# Los que yo dejaría -Caro
self.setattr_argument("N_repetitions",
NumberValue(100, min=1, ndecimals=0, step=1),
"Experiment params")
self.setattr_argument(f"t_med",
NumberValue(2*s, unit='s', scale=s, min=0.001*s),
"Experiment params")
self.setattr_argument(f"freqMin",NumberValue(600000*Hz,unit = "Hz",scale = Hz),
"Experiment params")
self.setattr_argument(f"freqMax",NumberValue(650000*Hz,unit = "Hz",scale = Hz),
"Experiment params")
self.setattr_argument("n_bins",
NumberValue(50, min=1, ndecimals=0, step=1),
"PostProcess params")
self.setattr_argument(f"UV_measurement_amp",
NumberValue(0.05, min=0.0, max=0.3),
"Laser params")
self.setattr_argument(f"UV_measurement_freq",
NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Laser params")
self.setattr_argument(f"UV_final_amp",
NumberValue(0.1, min=0.0, max=0.3),
"Laser params")
self.setattr_argument(f"UV_final_freq",
NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Laser params")
self.setattr_argument("Comments", StringValue(" "), "General comments")
#self.tau_rf = 1/self.f_rf
@rpc
def create_datasets(self):
## Datos
self.set_dataset("time_stamps", [], broadcast=True, archive=True)
#self.set_dataset("time_stamps_corrected", [], broadcast=True, archive=True)
self.set_dataset("counts", [], broadcast=True, archive=True)
# Datos postprocesado
self.set_dataset("fit_params", [0,0,0,0], broadcast=True, archive=True)
self.set_dataset("x_data", np.full(self.n_bins*4,np.nan), broadcast=True, archive=True)
self.set_dataset("y_data", np.full(self.n_bins*4,np.nan), broadcast=True, archive=True)
self.set_dataset("y_data_2", np.full(self.n_bins*4,np.nan), broadcast=True, archive=True)
self.set_dataset("amplitudes",np.zeros(self.N_repetitions),broadcast=True,archive=True)
self.set_dataset("freqsmod",np.linspace(self.freqMin,self.freqMax,self.N_repetitions),broadcast= True,archive=True)
# Parámetros
#self.set_dataset("f_rf", self.f_rf, broadcast=True, archive=True)
self.set_dataset("t_med", self.t_med, broadcast=True, archive=True)
self.set_dataset("n_bins", self.n_bins, broadcast=True, archive=True)
self.set_dataset("UV_measurement_amp", self.UV_measurement_amp, broadcast=False, archive=True)
self.set_dataset("Comments", self.Comments)
@rpc
def create_applets(self):
self.ccb.issue("create_applet", "cuentas",
"${python} -m pyLIAF.artiq.applets.histogram "
"counts "
"--update-delay 0.2") # Cambiar applet y parámetros -Caro
self.ccb.issue("create_applet", "correlatedfluorescence",
"${python} -m pyLIAF.artiq.applets.plot_xy "
"amplitudes "
"--x freqsmod")
@kernel
def medicion_y_lectura(self):
at_mu(self.core.get_rtio_counter_mu() + self.core.seconds_to_mu(100*us) )
delay(100*ms)
self.pmt.gate_rising(self.t_med)
self.save_counts(now_mu())
@kernel
def run_kernel(self):
self.core.reset()
self.pmt.input()
delay(100*ms)
#self.laserUV.set_channel()
self.core.break_realtime()
#self.laserUV.set_frequency(self.UV_measurement_freq, self.UV_measurement_amp)
self.core.break_realtime()
self.core.wait_until_mu(now_mu())
@kernel
def save_counts(self, t_end):
count = self.pmt.timestamp_mu(t_end)
t0 = t_end - self.core.seconds_to_mu(self.t_med)
while count > 0:
self.append_to_dataset("time_stamps", self.core.mu_to_seconds(count - t0) )
count = self.pmt.timestamp_mu(t_end)
@kernel
def stop_kernel(self):
self.core.break_realtime()
delay(100*ms)
self.laserUV.set_frequency(self.UV_final_freq, self.UV_final_amp)
self.core.break_realtime()
@rpc
def bin_time_arrivals(self, arrival_times, tau):
"""
Binea los tiempos de llegada de los fotones según el periodo tau.
Parameters:
arrival_times (numpy array): Vector con los tiempos de llegada de los fotones.
tau (float): Periodo de bineado.
Returns:
numpy array: Vector con los tiempos bienados.
"""
return np.array(arrival_times) - tau * (np.array(arrival_times) // tau)
@rpc
def sinusoidal(self, x, A, B, C, D):
return A * np.sin(B * x + C) + D
@rpc
def do_postprocess_and_fit(self,tau_mod):
self.time_stamps = self.get_dataset("time_stamps")
# Save data
for k in range(len(params)):
self.mutate_dataset("fit_params", k, params[k])
for k in range(len(x_extended)):
self.mutate_dataset("x_data", k, x_extended[k])
self.mutate_dataset("y_data", k, y_extended_norm[k] )
self.mutate_dataset("y_data_2", k, y_extended[k] )
return
@rpc
def run(self):
"Ejecución. Preparamos los dispositivos y llamamos al kernel."
self.initialize_tca_com()
time.sleep(0.1)
print('inicializado')
self.create_datasets()
self.create_applets()
time.sleep(0.1)
self.run_kernel()
Freqs = np.linspace(self.freqMin,self.freqMax,self.N_repetitions)
try:
for runN in range(self.N_repetitions):
freq = Freqs[runN]
self.changeFreqRigol(freq)
time.sleep(0.1)
print(f"Medicion {runN+1}/{self.N_repetitions} Frecuencia {freq} ")
self.set_dataset("time_stamps", [], broadcast=True, archive=True)
self.medicion_y_lectura()
amp = abs(np.mean(np.exp(1j*freq*np.array(self.get_dataset("time_stamps")))))
time.sleep(0.05)
self.mutate_dataset("amplitudes",runN,amp)
while self.scheduler.check_pause():
print("PAUSED EXPERIMENT")
self.stop_kernel()
self.core.comm.close()
self.scheduler.pause()
# TODO: reset freqs/amps
print("RESUMED EXPERIMENT")
except TerminationRequested:
self.stop_kernel()
print("STOPPED EXPERIMENT")
self.stop_kernel()
...@@ -45,7 +45,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -45,7 +45,7 @@ class FluorescenceCorrelation(EnvExperiment):
"Experiment params") "Experiment params")
self.setattr_argument("f_rf", self.setattr_argument("f_rf",
NumberValue(7186226.67*Hz, unit='Hz', scale=Hz, ndecimals=2 ), NumberValue(7186197.67*Hz, unit='Hz', scale=Hz, ndecimals=2 ),
"PostProcess params") "PostProcess params")
self.setattr_argument("n_bins", self.setattr_argument("n_bins",
...@@ -595,7 +595,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -595,7 +595,7 @@ class FluorescenceCorrelation(EnvExperiment):
@rpc @rpc
def run(self): def run(self):
"Ejecución. Preparamos los dispositivos y llamamos al kernel." "Ejecución. Preparamos los dispositivos y llamamos al kernel."
self.f_rf_hardcodeada = 7186226.62*Hz self.f_rf_hardcodeada = 7186197.62*Hz
self.tau_rf = 1/self.f_rf_hardcodeada self.tau_rf = 1/self.f_rf_hardcodeada
print(self.tau_rf) print(self.tau_rf)
self.create_datasets() self.create_datasets()
......
...@@ -3,10 +3,17 @@ from pyLIAF.artiq.controllers import UrukulCh ...@@ -3,10 +3,17 @@ from pyLIAF.artiq.controllers import UrukulCh
#from artiq.coredevice.ad9910 import PHASE_MODE_ABSOLUTE #from artiq.coredevice.ad9910 import PHASE_MODE_ABSOLUTE
import time import time
import numpy as np import numpy as np
import urllib.request
class IR_Scan_simple(EnvExperiment): class IR_Scan_simple(EnvExperiment):
"""BlinkIR""" """Barrido Iseg"""
def voltageupdate(self,channel,voltage):
BASE_URL = 'http://liaf-iseg/api/setItem/55005e1a49cad-69/0/0/'+f'{channel:.0f}'+'/Control.voltageSet/'+f'{voltage:.2f}'+'/V'
response = urllib.request.urlopen(f"{BASE_URL}").read()
def build(self): def build(self):
# Agrego kernel invariants a ver si mejoro algo de la performance # Agrego kernel invariants a ver si mejoro algo de la performance
kernel_invariants = getattr(self, 'kernel_invariants', set()) kernel_invariants = getattr(self, 'kernel_invariants', set())
self.kernel_invariants = kernel_invariants | {"no_measures", "t_cool", "t_trans", "t_readout"} self.kernel_invariants = kernel_invariants | {"no_measures", "t_cool", "t_trans", "t_readout"}
...@@ -24,9 +31,19 @@ class IR_Scan_simple(EnvExperiment): ...@@ -24,9 +31,19 @@ class IR_Scan_simple(EnvExperiment):
self.setattr_argument("no_measures", self.setattr_argument("no_measures",
NumberValue(2000, min=1, ndecimals=0, step=1), NumberValue(2000, min=1, ndecimals=0, step=1),
"Experiment params") "Experiment params")
self.setattr_argument("n_time",
NumberValue(2000, min=1, ndecimals=0, step=1), self.setattr_argument("n_voltage",
"Experiment params") NumberValue(80, unit='', ndecimals=0, scale=1, step=1),
"Iseg Params")
self.setattr_argument("Voltage_Max",
NumberValue(100, unit='', ndecimals=0, scale=1, step=1),
"Iseg Params")
self.setattr_argument("Voltage_Min",
NumberValue(0, unit='', ndecimals=0, scale=1, step=1),
"Iseg Params")
self.setattr_argument(f"IR1_cooling_freq", self.setattr_argument(f"IR1_cooling_freq",
...@@ -66,9 +83,9 @@ class IR_Scan_simple(EnvExperiment): ...@@ -66,9 +83,9 @@ class IR_Scan_simple(EnvExperiment):
"CPT params") "CPT params")
self.setattr_argument(f"IR2_CPT_amp", self.setattr_argument(f"IR2_CPT_amp",
NumberValue(0.3, min=0., max=0.8), NumberValue(0.3, min=0., max=0.3),
"CPT params") "CPT params")
self.setattr_argument(f"t_cool", self.setattr_argument(f"t_cool",
NumberValue(1*ms, unit='ms', scale=ms, min=0.001*ms), NumberValue(1*ms, unit='ms', scale=ms, min=0.001*ms),
...@@ -93,9 +110,14 @@ class IR_Scan_simple(EnvExperiment): ...@@ -93,9 +110,14 @@ class IR_Scan_simple(EnvExperiment):
self.set_dataset("no_measures", self.no_measures, broadcast=True, archive=True) self.set_dataset("no_measures", self.no_measures, broadcast=True, archive=True)
self.set_dataset("n_voltage",self.n_voltage,broadcast=True,archive=True)
self.set_dataset("Voltage_Min",self.Voltage_Min,broadcast=True,archive=True)
self.set_dataset("Voltage_Max",self.Voltage_Max,broadcast=True,archive=True)
self.set_dataset("IR1_cooling_freq", self.IR1_cooling_freq, broadcast=False, archive=True) self.set_dataset("IR1_cooling_freq", self.IR1_cooling_freq, broadcast=False, archive=True)
self.set_dataset("IR1_cooling_amp", self.IR1_cooling_amp, broadcast=False, archive=True) self.set_dataset("IR1_cooling_amp", self.IR1_cooling_amp, broadcast=False, archive=True)
self.set_dataset("UV_cooling_freq", self.UV_cooling_freq, broadcast=False, archive=True) self.set_dataset("UV_cooling_freq", self.UV_cooling_freq, broadcast=False, archive=True)
self.set_dataset("UV_cooling_amp", self.UV_cooling_amp, broadcast=False, archive=True) self.set_dataset("UV_cooling_amp", self.UV_cooling_amp, broadcast=False, archive=True)
...@@ -112,7 +134,6 @@ class IR_Scan_simple(EnvExperiment): ...@@ -112,7 +134,6 @@ class IR_Scan_simple(EnvExperiment):
self.set_dataset("t_trans", self.t_trans, broadcast=False, archive=True) self.set_dataset("t_trans", self.t_trans, broadcast=False, archive=True)
self.set_dataset("t_readout", self.t_readout, broadcast=False, archive=True) self.set_dataset("t_readout", self.t_readout, broadcast=False, archive=True)
self.set_dataset("Experiment_freqs_IR", [float(f) for f in np.arange(0,self.n_time)],broadcast = True,archive=True)
self.set_dataset("Comments", self.Comments, broadcast=False, archive=True) self.set_dataset("Comments", self.Comments, broadcast=False, archive=True)
...@@ -122,20 +143,17 @@ class IR_Scan_simple(EnvExperiment): ...@@ -122,20 +143,17 @@ class IR_Scan_simple(EnvExperiment):
self.ccb.issue("create_applet", "IR_espectro", self.ccb.issue("create_applet", "IR_espectro",
"${python} -m pyLIAF.artiq.applets.plot_xy " "${python} -m pyLIAF.artiq.applets.plot_xy "
"counts_spectrum " "counts_spectrum "
"--x IR1_Frequencies") "--x Volage_iseg")
@rpc @rpc
def Get_Calibrated_Frequencies(self) -> TList(TFloat): def Get_Voltage_list(self) -> TList(TFloat):
Calibrated_Experiment_freqs = self.get_dataset("Experiment_freqs_IR")
self.set_dataset("IR1_Frequencies_calibrated", np.array(Calibrated_Experiment_freqs), broadcast=True, archive=True)
Experiment_freqs = Calibrated_Experiment_freqs
self.set_dataset("IR1_Frequencies", np.array(Experiment_freqs), broadcast=True, archive=True) Voltage_array = np.linspace(self.Voltage_Min,self.Voltage_Max,self.n_voltage)
self.set_dataset("no_freqs", len(Calibrated_Experiment_freqs), broadcast=True, archive=True)
self.set_dataset("counts_spectrum", np.zeros(len(Experiment_freqs), dtype=int), broadcast=True, archive=True) self.set_dataset("Voltage_iseg", Voltage_array, broadcast=True, archive=True)
return Experiment_freqs
self.set_dataset("counts_spectrum", np.zeros(len(Voltage_array), dtype=int), broadcast=True, archive=True)
Voltage_list = [float(v) for v in Voltage_array]
return Voltage_list
@rpc @rpc
def Get_Final_Params(self) -> TList(TFloat): def Get_Final_Params(self) -> TList(TFloat):
...@@ -156,10 +174,10 @@ class IR_Scan_simple(EnvExperiment): ...@@ -156,10 +174,10 @@ class IR_Scan_simple(EnvExperiment):
t_cool_mu = self.core.seconds_to_mu(self.t_cool) # Precomputo esto para despues t_cool_mu = self.core.seconds_to_mu(self.t_cool) # Precomputo esto para despues
cuentas = 0 cuentas = 0
self.create_datasets() self.create_datasets()
Freqs = self.Get_Calibrated_Frequencies() Volts = self.Get_Voltage_list()
print(Freqs)
self.create_applets(len(Freqs)) self.create_applets(len(Volts))
self.init_kernel() self.init_kernel()
delay(1*ms) delay(1*ms)
...@@ -172,16 +190,19 @@ class IR_Scan_simple(EnvExperiment): ...@@ -172,16 +190,19 @@ class IR_Scan_simple(EnvExperiment):
iter_index = 0 iter_index = 0
while iter_index < len(Freqs): while iter_index < len(Volts):
#print(Freqs[iter_index]) print(Volts[iter_index])
#print(Amps[iter_index]) #print(Amps[iter_index])
Accumulated_counts = 0 Accumulated_counts = 0
self.voltageupdate(2,Volts[iter_index])
delay(10000*us) delay(10000*us)
self.core.break_realtime()
for runN in range(self.no_measures): for runN in range(self.no_measures):
if runN % 5 == 0: if runN % 2 == 0:
delay(self.t_cool) delay(self.t_cool)
else: else:
delay(100*us) delay(100*us)
cuentas = self.readout() # Hago la medicion y vuelvo con las cuentas cuentas = self.readout() # Hago la medicion y vuelvo con las cuentas
Accumulated_counts = Accumulated_counts + cuentas Accumulated_counts = Accumulated_counts + cuentas
self.mutate_dataset("counts_spectrum", iter_index, Accumulated_counts) self.mutate_dataset("counts_spectrum", iter_index, Accumulated_counts)
...@@ -257,7 +278,7 @@ class IR_Scan_simple(EnvExperiment): ...@@ -257,7 +278,7 @@ class IR_Scan_simple(EnvExperiment):
@kernel @kernel
def readout(self) -> TInt64: def readout(self) -> TInt64:
"""Registro de cuentas emitidas""" """Registro de cuentas emitidas"""
self.laserUV.select_profile(1) # Paso al perfil que cambia self.laserUV.select_profile(1) # Paso al perfil que cambia
self.laserIR1.select_profile(1) # Paso al perfil que cambia self.laserIR1.select_profile(1) # Paso al perfil que cambia
self.laserIR2.select_profile(1) # Paso al perfil que cambia self.laserIR2.select_profile(1) # Paso al perfil que cambia
......
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Suppress specific pylance warnings
# pyright: reportMissingImports=false, reportUndefinedVariable=false
"""
Barrer un laser con la Iseg y adquirir
"""
from artiq.experiment import *
from artiq.experiment import ( EnvExperiment, NumberValue, kernel,
ms, us, delay, rpc )
import numpy as np
import time
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
import requests
import re
CAMERA_TTL_NUM = 5
class BarridoIseg(EnvExperiment):
"""
Barrido Iseg
"""
def voltageupdate(self,channel,voltage):
BASE_URL = 'http://liaf-iseg/api/setItem/55005e1a49cad-69/0/0/'+f'{channel:.0f}'+'/Control.voltageSet/'+f'{voltage:.2f}'+'/V'
response = requests.post(f"{BASE_URL}")
def build(self):
self.setattr_device("core")
## Defino las ttls #####################################################
#self.camera_trigger = self.get_device(f"ttl{CAMERA_TTL_NUM}")
## Controles de GUI ####################################################
# número de pulsos a enviar
self.setattr_argument("number",
NumberValue(80, unit='', ndecimals=0, scale=1, step=1, type='int')
)
self.setattr_argument("Voltage_Down",
NumberValue(100, unit='', ndecimals=0, scale=0.1, step=0.1)
)
self.setattr_argument("Voltage_Set",
NumberValue(0, unit='', ndecimals=0, scale=0.1, step=0.1)
)
self.setattr_argument("time_exposure",
NumberValue(500*ms, unit='ms', ndecimals=10, step=1*ms,)
)
self.setattr_argument("time_delay",
NumberValue(500*ms, unit='ms', ndecimals=1, step=1*ms,),
"Triggers Settings"
)
self.setattr_argument("time_width",
NumberValue(10*ms, unit='ms', ndecimals=10, step=1*ms,),
"Triggers Settings"
)
@rpc
def create_datasets(self):
self.set_dataset("count", np.zeros(self.number, dtype=float), broadcast=True, archive=True)
@rpc
def run(self):
"Ejecución. Preparamos los dispositivos y llamamos al kernel."
self.create_datasets()
self.voltageupdate(2,self.Voltage_Set)
voltages=np.linspace(self.Voltage_Set,self.Voltage_Down,self.number)
#camera_set_exposure(self.time_exposure)
time.sleep(2)
# Reemplazo este código original por algo que usa GRAB
for jj in range(self.number):
self.voltageupdate(2,voltages[jj])
time.sleep(0.05)
#camera_snap_roi(gui=True,block=False)
time.sleep(self.time_delay)
#snap=cmd('get_response')
self.mutate_dataset("count", jj, 1 )
print('FIN')
'''
@kernel
def conf(self):
"Configuración del dispositivo"
self.core.reset()
self.camera_trigger.output()
delay(16*ms)
@kernel
def fire_trigger(self):
"Envío y medición de pulsos"
self.conf()
self.camera_trigger.on()
delay( self.time_width )
self.camera_trigger.off()
delay( self.time_delay )
@kernel
def fire(self):
self.conf()
delay(10*ms)
for _ in range(self.number+5):
self.fire_trigger()
'''
...@@ -10,7 +10,7 @@ in ...@@ -10,7 +10,7 @@ in
# List desired Python packages here. # List desired Python packages here.
artiq-full.artiq artiq-full.artiq
artiq-full.artiq-comtools artiq-full.artiq-comtools
ps.pandas ps.pandas
ps.numpy ps.numpy
ps.scipy ps.scipy
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment