Skip to content
UV_Scanning_Calibration.py 2.31 KiB
Newer Older
import numpy as np
from time import sleep
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
from pyLIAF.RedPitaya import Read_analog as rp
from scipy import interpolate

class LaserPowerCalibration(EnvExperiment):
    """Testing UV Laser power calibration with photodiode and a red pitaya """

    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

    @rpc
    def create_datasets(self):
        self.Experiment_freqs = self.get_dataset("Experiment_freqs")
        self.Experiment_amps = self.get_dataset("Experiment_amps")

        self.set_dataset("Experiment_freqs", self.Experiment_freqs, broadcast=True, archive=True)
        self.set_dataset("Experiment_amps", self.Experiment_amps, broadcast=True, archive=True)

        self.set_dataset("Measured_PD_UV_counts", list(np.zeros(len(self.Experiment_freqs), dtype=int)), broadcast=True, archive=True)

    @rpc(flags={"async"})
    def create_applets(self):

        self.ccb.issue("create_applet", "verification_powercalibration",
                        "${python} -m pyLIAF.artiq.applets.plot_xy "
                        "Measured_PD_UV_counts "
                        "--x Experiment_freqs")
        

    @rpc(flags={"async"})
    def measure_PD(self, i):
        value = rp.ReadVoltage()
        print(value)
        self.mutate_dataset("Measured_PD_UV_counts", i, np.abs(value))

    @kernel
    def init_kernel(self):
        self.core.reset()
        self.laserUV.initialize_channel()

        delay(10*us)

        self.laserUV.set_channel()

        self.core.wait_until_mu(now_mu())

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

    @kernel
    def change_frequency(self, freq, amp):
        self.core.break_realtime()
        delay(50*ms)
        self.laserUV.set_frequency(freq, amp)        

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

        self.No_freqs = len(self.Experiment_freqs)

        i = 0
        
        for amp, freq in zip(self.Experiment_amps, self.Experiment_freqs):
            print(amp, freq)
            self.change_frequency(freq, amp)
            self.measure_PD(i)
            i = i + 1