Commit 466cd672 authored by Nicolas Nunez Barreto's avatar Nicolas Nunez Barreto

datos fluorescen corr

parent 0c350a8b
from artiq.experiment import *
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh from pyLIAF.artiq.controllers import UrukulCh
import numpy as np import numpy as np
from scipy.optimize import curve_fit from scipy.optimize import curve_fit
import time
# TODO: # TODO:
# [ ] Revisar los tiempos # [ ] Revisar los tiempos
...@@ -14,6 +16,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -14,6 +16,7 @@ class FluorescenceCorrelation(EnvExperiment):
def build(self): def build(self):
self.setattr_device("core") self.setattr_device("core")
self.setattr_device("ccb") # Para las applets self.setattr_device("ccb") # Para las applets
self.setattr_device("scheduler")
self.pmt = self.get_device("ttl0") self.pmt = self.get_device("ttl0")
#self.pmt_state = self.get_device("ttl4") #self.pmt_state = self.get_device("ttl4")
...@@ -41,8 +44,8 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -41,8 +44,8 @@ class FluorescenceCorrelation(EnvExperiment):
NumberValue(2*s, unit='s', scale=s, min=0.001*s), NumberValue(2*s, unit='s', scale=s, min=0.001*s),
"Experiment params") "Experiment params")
self.setattr_argument(f"f_rf", self.setattr_argument("f_rf",
NumberValue(7262776.1*Hz, unit='Hz', scale=Hz ), NumberValue(7262776.1*Hz, unit='Hz', scale=Hz, ndecimals=2 ),
"PostProcess params") "PostProcess params")
self.setattr_argument("n_bins", self.setattr_argument("n_bins",
...@@ -68,7 +71,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -68,7 +71,7 @@ class FluorescenceCorrelation(EnvExperiment):
self.setattr_argument("Comments", StringValue(" "), "General comments") self.setattr_argument("Comments", StringValue(" "), "General comments")
self.tau_rf = 1/self.f_rf #self.tau_rf = 1/self.f_rf
## Hasta acá ## ## Hasta acá ##
...@@ -202,14 +205,14 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -202,14 +205,14 @@ class FluorescenceCorrelation(EnvExperiment):
self.set_dataset("counts", [], broadcast=True, archive=True) self.set_dataset("counts", [], broadcast=True, archive=True)
# Datos postprocesado # Datos postprocesado
self.set_dataset("fit_params", [], broadcast=True, archive=True) self.set_dataset("fit_params", [0,0,0,0], broadcast=True, archive=True)
self.set_dataset("x_data", [], 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", [], broadcast=True, archive=True) self.set_dataset("y_data", np.full(self.n_bins*4,np.nan), broadcast=True, archive=True)
# Parámetros # Parámetros
self.set_dataset("f_rf", self.f_rf, broadcast=False, archive=True) self.set_dataset("f_rf", self.f_rf, broadcast=True, archive=True)
self.set_dataset("t_med", self.t_med, broadcast=False, archive=True) self.set_dataset("t_med", self.t_med, broadcast=True, archive=True)
self.set_dataset("n_bins", self.bins, broadcast=False, 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("UV_measurement_amp", self.UV_measurement_amp, broadcast=False, archive=True)
self.set_dataset("Comments", self.Comments) self.set_dataset("Comments", self.Comments)
...@@ -271,11 +274,17 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -271,11 +274,17 @@ class FluorescenceCorrelation(EnvExperiment):
"counts " "counts "
"--update-delay 0.2") # Cambiar applet y parámetros -Caro "--update-delay 0.2") # Cambiar applet y parámetros -Caro
self.ccb.issue("create_applet", "correlatedfluorescence",
"${python} -m pyLIAF.artiq.applets.plot_xy "
"y_data "
"--x x_data")
@kernel @kernel
def medicion_y_lectura(self): def medicion_y_lectura(self):
at_mu(self.core.get_rtio_counter_mu() + self.core.seconds_to_mu(100*us) ) 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.pmt.gate_rising(self.t_med)
self.save_counts(now_mu()) self.save_counts(now_mu())
...@@ -286,6 +295,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -286,6 +295,7 @@ class FluorescenceCorrelation(EnvExperiment):
self.core.reset() self.core.reset()
self.pmt.input() self.pmt.input()
delay(100*ms)
self.laserUV.set_channel() self.laserUV.set_channel()
self.core.break_realtime() self.core.break_realtime()
...@@ -315,7 +325,7 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -315,7 +325,7 @@ class FluorescenceCorrelation(EnvExperiment):
@kernel @kernel
def save_counts(self, t_end): def save_counts(self, t_end):
count = self.pmt.timestamp_mu(t_end) count = self.pmt.timestamp_mu(t_end)
t0 = t_end - self.core.seconds_to_mu(self.t_readout) t0 = t_end - self.core.seconds_to_mu(self.t_med)
while count > 0: while count > 0:
self.append_to_dataset("time_stamps", self.core.mu_to_seconds(count - t0) ) self.append_to_dataset("time_stamps", self.core.mu_to_seconds(count - t0) )
count = self.pmt.timestamp_mu(t_end) count = self.pmt.timestamp_mu(t_end)
...@@ -523,7 +533,9 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -523,7 +533,9 @@ class FluorescenceCorrelation(EnvExperiment):
@kernel @kernel
def stop_kernel(self): def stop_kernel(self):
self.core.break_realtime() self.core.break_realtime()
delay(100*ms)
self.laserUV.set_frequency(self.UV_final_freq, self.UV_final_amp) self.laserUV.set_frequency(self.UV_final_freq, self.UV_final_amp)
self.core.break_realtime() self.core.break_realtime()
...@@ -538,8 +550,9 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -538,8 +550,9 @@ class FluorescenceCorrelation(EnvExperiment):
Returns: Returns:
numpy array: Vector con los tiempos bienados. numpy array: Vector con los tiempos bienados.
""" """
return arrival_times - tau * (arrival_times // tau) return np.array(arrival_times) - tau * (np.array(arrival_times) // tau)
@rpc @rpc
def sinusoidal(self, x, A, B, C, D): def sinusoidal(self, x, A, B, C, D):
...@@ -557,30 +570,45 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -557,30 +570,45 @@ class FluorescenceCorrelation(EnvExperiment):
y_extended = np.tile(hist, 3) y_extended = np.tile(hist, 3)
# x_extended_dense = np.arange(np.min(x_extended),np.max(x_extended),0.1*(x_extended[1]-x_extended[0])) # x_extended_dense = np.arange(np.min(x_extended),np.max(x_extended),0.1*(x_extended[1]-x_extended[0]))
try:
params, _ = curve_fit(self.sinusoidal, x_extended, y_extended, p0=[max(y_extended), 2*np.pi/self.tau_rf, 0, np.mean(y_extended)]) params, _ = curve_fit(self.sinusoidal, x_extended, y_extended, p0=[max(y_extended), 2*np.pi/self.tau_rf, 0, np.mean(y_extended)])
self.append_to_dataset("fit_params", params ) except Exception as e:
self.append_to_dataset("x_data", x_extended ) params = [0,0,0,0]
self.append_to_dataset("y_data", y_extended ) print(e.message, e.args)
print("No se pudo hacer el ajuste")
# 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[k] )
return return
@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 = 7262766.1*Hz
self.tau_rf = 1/self.f_rf_hardcodeada
print(self.tau_rf)
self.create_datasets() self.create_datasets()
self.create_applets() self.create_applets()
delay(1*ms) time.sleep(0.1)
self.run_kernel() self.run_kernel()
try: try:
for runN in range(self.N_repetitions): for runN in range(self.N_repetitions):
print(f"Medicion {runN+1}/{self.N_repetitions}")
self.set_dataset("time_stamps", [], broadcast=True, archive=True)
self.medicion_y_lectura() self.medicion_y_lectura()
self.do_postprocess_and_fit() self.do_postprocess_and_fit()
time.sleep(0.05) time.sleep(0.05)
while self.scheduler.check_pause(): while self.scheduler.check_pause():
print("PAUSED EXPERIMENT") print("PAUSED EXPERIMENT")
self.stop_kernel() self.stop_kernel()
...@@ -595,3 +623,4 @@ class FluorescenceCorrelation(EnvExperiment): ...@@ -595,3 +623,4 @@ class FluorescenceCorrelation(EnvExperiment):
self.stop_kernel() self.stop_kernel()
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