Source code for instruments.yokogawa.yokogawa6370

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Provides support for the Yokogawa 6370 optical spectrum analyzer.
"""

# IMPORTS #####################################################################

from __future__ import absolute_import
from __future__ import division

from enum import IntEnum, Enum

import quantities as pq

from instruments.abstract_instruments import (
    OpticalSpectrumAnalyzer,
    OSAChannel,
)
from instruments.util_fns import (
    enum_property, unitful_property, unitless_property,
    bounded_unitful_property, ProxyList
)


# CLASSES #####################################################################

[docs]class Yokogawa6370(OpticalSpectrumAnalyzer): """ The Yokogawa 6370 is a optical spectrum analyzer. Example usage: >>> import instruments as ik >>> import quantities as pq >>> inst = ik.yokogawa.Yokogawa6370.open_visa('TCPIP0:192.168.0.35') >>> inst.start_wl = 1030e-9 * pq.m """ def __init__(self, *args, **kwargs): super(Yokogawa6370, self).__init__(*args, **kwargs) # Set data Format to binary self.sendcmd(":FORMat:DATA REAL,64") # TODO: Find out where we want this # INNER CLASSES #
[docs] class Channel(OSAChannel): """ Class representing the channels on the Yokogawa 6370. This class inherits from `OSAChannel`. .. warning:: This class should NOT be manually created by the user. It is designed to be initialized by the `Yokogawa6370` class. """ def __init__(self, parent, idx): self._parent = parent self._name = idx # METHODS #
[docs] def data(self, bin_format=True): cmd = ":TRAC:Y? {0}".format(self._name) self._parent.sendcmd(cmd) data = self._parent.binblockread(data_width=4, fmt="<d") self._parent._file.read_raw(1) # pylint: disable=protected-access return data
[docs] def wavelength(self, bin_format=True): cmd = ":TRAC:X? {0}".format(self._name) self._parent.sendcmd(cmd) data = self._parent.binblockread(data_width=4, fmt="<d") self._parent._file.read_raw(1) # pylint: disable=protected-access return data
# ENUMS #
[docs] class SweepModes(IntEnum): """ Enum containing valid output modes for the Yokogawa 6370 """ SINGLE = 1 REPEAT = 2 AUTO = 3
[docs] class Traces(Enum): """ Enum containing valid Traces for the Yokogawa 6370 """ A = "TRA" B = "TRB" C = "TRC" D = "TRD" E = "TRE" F = "TRF" G = "TRG"
# PROPERTIES # @property def channel(self): """ Gets the specific channel object. This channel is accessed as a list in the following manner:: >>> import instruments as ik >>> osa = ik.yokogawa.Yokogawa6370.open_gpibusb('/dev/ttyUSB0') >>> dat = osa.channel["A"].data # Gets the data of channel 0 :rtype: `list`[`~Yokogawa6370.Channel`] """ return ProxyList(self, Yokogawa6370.Channel, Yokogawa6370.Traces) start_wl, start_wl_min, start_wl_max = bounded_unitful_property( ":SENS:WAV:STAR", pq.meter, doc=""" The start wavelength in m. """, valid_range=(600e-9, 1700e-9) ) stop_wl, stop_wl_min, stop_wl_max = bounded_unitful_property( ":SENS:WAV:STOP", pq.meter, doc=""" The stop wavelength in m. """, valid_range=(600e-9, 1700e-9) ) bandwidth = unitful_property( ":SENS:BAND:RES", pq.meter, doc=""" The bandwidth in m. """ ) span = unitful_property( ":SENS:WAV:SPAN", pq.meter, doc=""" A floating point property that controls the wavelength span in m. """ ) center_wl = unitful_property( ":SENS:WAV:CENT", pq.meter, doc=""" A floating point property that controls the center wavelength m. """ ) points = unitless_property( ":SENS:SWE:POIN", doc=""" An integer property that controls the number of points in a trace. """ ) sweep_mode = enum_property( ":INIT:SMOD", SweepModes, input_decoration=int, doc=""" A property to control the Sweep Mode as one of Yokogawa6370.SweepMode. Effective only after a self.start_sweep().""" ) active_trace = enum_property( ":TRAC:ACTIVE", Traces, doc=""" The active trace of the OSA of enum Yokogawa6370.Traces. Determines the result of Yokogawa6370.data() and Yokogawa6370.wavelength().""" ) # METHODS #
[docs] def data(self): """ Function to query the active Trace data of the OSA. """ return self.channel[self.active_trace].data
[docs] def wavelength(self): """ Query the wavelength axis of the active trace. """ return self.channel[self.active_trace].wavelength
[docs] def start_sweep(self): """ Triggering function for the Yokogawa 6370. After changing the sweep mode, the device needs to be triggered before it will update. """ self.sendcmd("*CLS;:init")