Source code for agilentlightwave.agilent_8164B_power_meter

from . import _power_meter as pm
from ._agilent_lightwave_connection import AgilentLightwaveConnection

[docs]class PowerMeterAgilent8164B(AgilentLightwaveConnection, pm.PowerMeter): ''' Driver for the Agilent 8164B power meter module that can read power and set the wavelength as well as specify in what units the Agilent 8164B should operate in. Args: gpib_num (int): The number of the GPIB bus the power meter is sitting on. gpib_dev_num (int): The device number that the power meter is on the aforementioned bus. channel_num (int): Either `1` or `2` depending on which power metre channel to use. power_unit (str): Either \'W\' or \'dBm\' depending on whether the power units should be displayed in [W] or [dBm] on the Agielent 8164B\'s screen. ''' def __init__(self, gpib_num=None, gpib_dev_num=None, sensor_num=1, channel_num=1, power_unit='W'): super().__init__(gpib_num=gpib_num, gpib_dev_num=gpib_dev_num) self._sensor_num = int(sensor_num) self._channel_num = int(channel_num) def _get_power_W(self): instr = 'fetc' + str(self._sensor_num) + ':chan%i:pow?' % self._channel_num power = float(self._query(instr)) if self._unit == 'dbm': power = pm.PowerMeter.dbm_to_watts(power) return power
[docs] def set_wavelength_m(self, wavelength_m): cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:wav ' + str(wavelength_m) + 'm' self._write(cmd) r = self.get_wavelength_m() return r
[docs] def get_wavelength_m(self): cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:wav?' wl_m_str = self._query(cmd) wl_m = float(wl_m_str) return wl_m
[docs] def set_unit(self, unit): ''' Sets the units the power meter will display on screen. Args: unit (str): Either \'W\' or \'dBm\' depending on whether the power units should be displayed in [W] or [dBm] on the Agielent 8164B\'s screen. Returns: str: The unit the power meter is set to display. Either \'W\' or \'dBm\' ''' assert unit.lower() in ('dbm', 'w') cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:unit ' + unit self._write(cmd) r = self.get_unit() self._unit = unit.lower() return r
[docs] def get_unit(self): ''' Gets the units the power meter is set to display. Returns: str: The unit the power meter is set to display. Either \'W\' or \'dBm\' ''' cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:unit?' data = self._query(cmd) unit = int(data) if unit == 0: r = 'dBm' else: r = 'W' return r
[docs] def get_averaging_time_s(self): cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:atim?' data = self._query(cmd) return data
[docs] def set_averaging_time_s(self, averaging_time_s): cmd = 'sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:atim %fs' % averaging_time_s data = self._write(cmd) return self.get_averaging_time_s()
[docs] def set_auto_range(self): ''' Turns on auto-range. Returns: bool: `1` if auto-range is switched on and `0` if auto-range is switched off. ''' self._write('sens' + str(self._sensor_num) + ':pow:range:auto 1') r = self.get_auto_range() return r
[docs] def unset_auto_range(self): ''' Turns off auto-range. Returns: bool: `1` if auto-range is switched on and `0` if auto-range is switched off. ''' self._write('sens' + str(self._sensor_num) + ':pow:range:auto 0') r = self.get_auto_range() return r
[docs] def set_range_dbm(self, range_dbm): self._write('sens' + str(self._sensor_num) + ':pow:rang %.2fdbm' % range_dbm) r = self.get_range_dbm() return r
[docs] def get_range_dbm(self): r = self._query('sens' + str(self._sensor_num) + ':pow:rang?') r = float(r) assert -110. <= r <= 30. return r
[docs] def get_power_meter_range(self): data = self.ask('sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:range?') return float(data)
[docs] def set_power_meter_range(self, max_power_dbm): """Set the power meter range, range in dBm""" self._write('sens' + str(self._sensor_num) + ':chan' + str(self._channel_num) + ':pow:range ' + \ str(max_power_dbm) + 'dbm') return self.get_power_meter_range()
[docs] def get_auto_range(self): ''' Checks what the auto-range is set to. Returns: bool: `1` if auto-range is switched on and `0` if auto-range is switched off. ''' data = self._query('sens' + str(self._sensor_num) + ':pow:range:auto?') r = bool(int(data)) return r
[docs] def get_analogue_current_A(self, analogue_voltage_V): raise NotImplementedError()
[docs] def get_responsivity_A_W(self): raise NotImplementedError()