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
import numpy as np
from scipy.optimize import curve_fit
import time
# TODO:
# [ ] Revisar los tiempos
......@@ -14,6 +16,7 @@ class FluorescenceCorrelation(EnvExperiment):
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")
......@@ -41,8 +44,8 @@ class FluorescenceCorrelation(EnvExperiment):
NumberValue(2*s, unit='s', scale=s, min=0.001*s),
"Experiment params")
self.setattr_argument(f"f_rf",
NumberValue(7262776.1*Hz, unit='Hz', scale=Hz ),
self.setattr_argument("f_rf",
NumberValue(7262776.1*Hz, unit='Hz', scale=Hz, ndecimals=2 ),
"PostProcess params")
self.setattr_argument("n_bins",
......@@ -68,7 +71,7 @@ class FluorescenceCorrelation(EnvExperiment):
self.setattr_argument("Comments", StringValue(" "), "General comments")
self.tau_rf = 1/self.f_rf
#self.tau_rf = 1/self.f_rf
## Hasta acá ##
......@@ -202,14 +205,14 @@ class FluorescenceCorrelation(EnvExperiment):
self.set_dataset("counts", [], broadcast=True, archive=True)
# Datos postprocesado
self.set_dataset("fit_params", [], broadcast=True, archive=True)
self.set_dataset("x_data", [], broadcast=True, archive=True)
self.set_dataset("y_data", [], broadcast=True, archive=True)
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)
# Parámetros
self.set_dataset("f_rf", self.f_rf, broadcast=False, archive=True)
self.set_dataset("t_med", self.t_med, broadcast=False, archive=True)
self.set_dataset("n_bins", self.bins, 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=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)
......@@ -271,21 +274,28 @@ class FluorescenceCorrelation(EnvExperiment):
"counts "
"--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
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()
......@@ -315,7 +325,7 @@ class FluorescenceCorrelation(EnvExperiment):
@kernel
def save_counts(self, 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:
self.append_to_dataset("time_stamps", self.core.mu_to_seconds(count - t0) )
count = self.pmt.timestamp_mu(t_end)
......@@ -521,12 +531,14 @@ class FluorescenceCorrelation(EnvExperiment):
# self.laserUV.off()
# #self.pmt_state.off()
@kernel
@kernel
def stop_kernel(self):
self.core.break_realtime()
self.laserUV.set_frequency(self.UV_final_freq, self.UV_final_amp)
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):
"""
......@@ -538,8 +550,9 @@ class FluorescenceCorrelation(EnvExperiment):
Returns:
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
def sinusoidal(self, x, A, B, C, D):
......@@ -556,31 +569,46 @@ class FluorescenceCorrelation(EnvExperiment):
x_extended = np.concatenate([bin_edges[:-1] + i * self.tau_rf for i in range(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]))
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 )
self.append_to_dataset("x_data", x_extended )
self.append_to_dataset("y_data", y_extended )
except Exception as e:
params = [0,0,0,0]
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
@rpc
def run(self):
"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_applets()
delay(1*ms)
time.sleep(0.1)
self.run_kernel()
try:
for runN in range(self.N_repetitions):
self.medicion_y_lectura()
print(f"Medicion {runN+1}/{self.N_repetitions}")
self.set_dataset("time_stamps", [], broadcast=True, archive=True)
self.medicion_y_lectura()
self.do_postprocess_and_fit()
time.sleep(0.05)
while self.scheduler.check_pause():
print("PAUSED EXPERIMENT")
self.stop_kernel()
......@@ -594,4 +622,5 @@ class FluorescenceCorrelation(EnvExperiment):
print("STOPPED EXPERIMENT")
self.stop_kernel()
\ No newline at end of file
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