Source code for lightlab.equipment.lab_instruments.HP_8156A_VA

from . import VISAInstrumentDriver
from lightlab.laboratory.instruments import VariableAttenuator

import numpy as np
import time


[docs]class HP_8156A_VA(VISAInstrumentDriver): ''' HP8156A variable attenuator `Manual <https://www.artisantg.com/info/ATGt6b5s.pdf>`__ Usage: :any:`/ipynbs/Hardware/VariableAttenuator.ipynb` ''' instrument_category = VariableAttenuator safeSleepTime = 1 # Time it takes to settle __attenDB = None def __init__(self, name='The VOA on the GC bench', address=None, **kwargs): VISAInstrumentDriver.__init__(self, name=name, address=address, **kwargs)
[docs] def startup(self): self.on()
[docs] def on(self): self.write(':OUTPUT:STATE 1') # enable
[docs] def off(self): self.write(':OUTPUT:STATE 0') # disable
[docs] def setAtten(self, val, isLin=True): ''' Simple method instead of property access ''' if isLin: self.attenLin = val else: self.attenDB = val
@property def attenDB(self): if self.__attenDB is None: self.__attenDB = float(self.query(":INPUT:ATTENUATION?")) return self.__attenDB @attenDB.setter def attenDB(self, newAttenDB): if newAttenDB < 0: newAttenDB = 0 elif newAttenDB > 60: newAttenDB = 60 self.__attenDB = newAttenDB self.sendToHardware() @property def attenLin(self): return 10 ** (-self.attenDB / 10) @attenLin.setter def attenLin(self, newAttenLin): newAttenLin = max(newAttenLin, 1e-6) self.attenDB = -10 * np.log10(newAttenLin)
[docs] def sendToHardware(self, sleepTime=None): if sleepTime is None: sleepTime = self.safeSleepTime self.write('INP:ATT ' + str(self.attenDB) + 'DB') time.sleep(sleepTime) # Let it settle
@property def wavelength(self): raise NotImplementedError('please implement me!') @property def calibration(self): raise NotImplementedError('please implement me!')