Skip to content
Photodiode_in_time.py 3.06 KiB
Newer Older
Nicolas Nunez Barreto's avatar
Nicolas Nunez Barreto committed
import numpy as np
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
from pyLIAF.RaspberryPi.PD_reader import PDreader as rpi
from time import sleep

class PMTCalibration(EnvExperiment):
    """Plotting photodiode signal in time"""

    def build(self):
        self.setattr_device("ccb")
        self.setattr_device("scheduler")
        self.setattr_device("core")

        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(210*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
                             "Laser params")

        self.setattr_argument(f"IR_amp",
                              NumberValue(0.3, min=0.01, max=0.35),
                             "Laser params")

        self.setattr_argument(f"UV_freq",
                              NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
                             "Laser params")

        self.setattr_argument(f"UV_amp",
                              NumberValue(0.3, min=0.01, max=0.3),
                             "Laser params")


    @rpc
    def create_datasets(self):
        self.set_dataset("Current_PD", np.array([0.0]), broadcast=True, archive=False)


    @rpc
    def create_applets(self):
        self.ccb.issue("create_applet", "PD_signal",
                        "${python} -m pyLIAF.artiq.applets.realtime "
                        "40 "
                        "Current_PD")


    @kernel
    def init_kernel(self):
        self.core.reset()
        #self.laserIR.initialize_channel()
        #self.laserUV.channel.cpld.init()
        #self.laserUV.channel.init()
        #self.laserIR.channel.cpld.init()
        #self.core.wait_until_mu(now_mu())
        #self.laserIR.channel.init()
        #self.laserUV.initialize_channel()

        delay(1000*us)

        self.laserIR.set_channel()
        self.laserUV.set_channel()

        self.core.wait_until_mu(now_mu())

        delay(1*ms)
        self.laserIR.on()
        self.laserUV.on()

        self.laserUV.set_frequency(self.UV_freq, self.UV_amp)
        self.laserIR.set_frequency(self.IR_freq, self.IR_amp)       


    def run(self):
        self.create_datasets()
        self.create_applets()
        self.init_kernel()
        try:
            while True:
                self.measure_PD()
                while self.scheduler.check_pause():
                    print("PAUSED BLINKING")
                    self.core.comm.close()
                    self.scheduler.pause()
                    # TODO: reset freqs/amps
                    print("RESUMED BLINKING")
        except TerminationRequested:
            print("STOPPED BLINKING")

        return cuentas


    @rpc(flags={"async"})
    def measure_PD(self, dump=False):
        value = rpi.ReadPD_average_pi(0, 1)
        #print(type(value))
        if not dump:
            self.mutate_dataset("Current_PD", 0, np.abs(value))
        sleep(0.1)