Skip to content
ion_statistics.py 2.56 KiB
Newer Older
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
import numpy as np

# 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

class IonStatistics(EnvExperiment):
    """Measuring ion statistics"""
    def build(self):
        self.setattr_device("core")
        self.setattr_device("ccb")

        self.pmt = self.get_device("ttl0")
        self.pmt_state = self.get_device("ttl4")

        self.laserTISA = UrukulCh(self, ch=3, freq=80.0, amp=0.15, name="TISA")

#        self.setattr_argument("bin", NumberValue(50e-9, unit='us'), "Binning params")

    @rpc
    def create_datasets(self):
        self.set_dataset("counts", [],
                            broadcast=True, archive=True)
        self.set_dataset("t_readout", self.t_readout, broadcast=False, archive=True)
        self.set_dataset("t_prep_S", self.t_prepS, broadcast=False, archive=True)
        self.set_dataset("t_enfriar_ion", self.t_cool, broadcast=False, archive=True)
        self.set_dataset("no_measures", self.no_measures, broadcast=False, archive=True)

        self.set_dataset("Comments", self.Comments)

        #self.set_dataset("frec_UV",self.frec_UV, broadcast=False,archive=True)
        #self.set_dataset("frec_IR",self.frec_IR, broadcast=False,archive=True)
        # TODO: Agregar forma de guardar los datos de los canales del Urukul.
        # o bien guardando todos aca, o armando un metodo apropiado en su controlador

        #self.set_dataset("binvector", np.arange(0, self.t_readout, self.bin*1e-6), broadcast=True, archive=False)


    @rpc
    def create_applets(self):
        pass


    @kernel
    def run(self):
        self.create_datasets()
        self.create_applets()
        self.init_kernel()

        delay(1*s)
        self.laserTISA.off()
        self.pmt_state.on()
        delay(5*s)
        self.laserTISA.on()
        self.pmt_state.off()
        self.core.break_realtime()

    @kernel
    def init_kernel(self):
        #self.core.reset()
        self.pmt.input()
        self.pmt_state.output()
        self.pmt_state.off()

        delay(1*s)
        #self.laserTISA.set_channel()
        #delay(10*ms)
        #self.laserTISA.on()
        #self.core.wait_until_mu(now_mu())
        #self.laserTISA.set_frequency(self.TISA_measurement_freq, self.TISA_measurement_amp, profile=0)
        #delay(10*ms)
        self.core.break_realtime()
        self.core.wait_until_mu(now_mu())