Source code for neclib.devices.signal_generator.fsw0020
import time
from typing import Optional, Union
import astropy.units as u
import ogameasure
from ...core.security import busy
from ...core.units import dBm
from ...utils import skip_on_simulator
from .signal_generator_base import SignalGenerator
[docs]class FSW0020(SignalGenerator):
    """Signal Generator, which can supply Local Signal.
    Notes
    -----
    Configuration items for this device:
    host : str
        IP address for ethernet communicator.
    port : int
        ethernet port of using devices.
    """
    Manufacturer: str = "PhaseMatrix"
    Model = "FSW0020"
    Identifier = "host"
    @skip_on_simulator
    def __init__(self) -> None:
        com = ogameasure.ethernet(self.Config.host, self.Config.port)
        self.sg = ogameasure.Phasematrix.FSW0020(com)
        self.sg.use_external_reference_source()
[docs]    def set_freq(self, GHz: Union[int, float]) -> None:
        with busy(self, "busy"):
            self.sg.freq_set(GHz)
            time.sleep(0.1) 
[docs]    def set_power(self, dBm: Union[int, float]) -> None:
        """Set the power of the signal generator output.
        Attention
        ---------
        The ability to change power of this signal generator is optional configuration.
        For products without the option, this function has no effect but raises no
        error.
        """
        with busy(self, "busy"):
            self.sg.power_set(dBm)
            time.sleep(0.1) 
[docs]    def get_freq(self) -> u.Quantity:
        with busy(self, "busy"):
            f = self.sg.freq_query()
            time.sleep(0.1)
            return f * u.Hz 
[docs]    def get_power(self) -> u.Quantity:
        """Get the power of the signal generator output.
        Attention
        ---------
        The ability to change power of this signal generator is optional configuration.
        For products without the option, this function may return meaningless value.
        """
        with busy(self, "busy"):
            f = self.sg.power_query()
            time.sleep(0.1)
            return f * dBm 
[docs]    def start_output(self) -> None:
        with busy(self, "busy"):
            self.sg.output_on()
            time.sleep(0.1) 
[docs]    def stop_output(self) -> None:
        with busy(self, "busy"):
            self.sg.output_off()
            time.sleep(0.1) 
[docs]    def get_output_status(self) -> Optional[bool]:
        with busy(self, "busy"):
            f = self.sg.output_query()
            time.sleep(0.1)
            if f == 1:
                return True
            elif f == 0:
                return False
            else:
                return None 
[docs]    def finalize(self) -> None:
        self.stop_output()
        try:
            self.sg.com.close()
        except AttributeError:
            pass 
[docs]    def close(self) -> None:
        try:
            self.sg.com.close()
            return
        except AttributeError:
            pass