devctrl.devices.lock_in.impl.model7260.Model7260#
- class Model7260(instr, check_front_switch=True)[source]#
Bases:
LockInAmpWrapper class for the Model 7260 DSP Lock-In controlled via pyvisa
Methods
Manually add a specific device.
allow_only_dummy_devicesauto_gainauto_sensitivityGet the data from the buffer.
Get the maximum buffer size for storing samples
Query the number of points in the buffer :return:
Check if the target number of points are in the buffer
Compatibility function with same syntax as SR830 :param what: Quantities to measure. The Model7260 can measure more than 2 at a time! :param length: Number of values to measure or None to fill the buffer to the maximum. The max length depends on how many quantities are measured. :param sample_rate: This will be converted to a measurement interval and rounded to 5 ms. So you might not get the exact same sample rate as with the SR830, but you can choose arbitrary values.
Start a buffer measurement that was previously configured with
buffer_setup()Stop the current buffer measurement
Check the overload status byte
Check the device status
This function should be overridden by device implementations only, and is not intended to be used directly.
Connect an instance of the device's dummy implementation
decrease_ac_gain_dbDecreases the full-scale sensitivity (output signal range) :return: The new full-scale sensitivity
Decreases the time constant :return: The new time constant
get_ac_gain_dbReturn a flat dictionary of all base classes below this class :param recurse: If True, recursively search for base classes :return: dict of {class name: class}
get_filter_slopeget_frequency_HzGet the highest valid sample rate not exceeding the target
get_reference_triggerget_reserveget_sensitivity_voltQuery the status of the device and return a string describing errors.
TODO: Actually is Synchronous time constant control and not a filter
get_time_constant_ssee read_get_wait_time_s
increase_ac_gain_dbIncreases the full-scale sensitivity (output signal range) :return: The new full-scale sensitivity
Increases the time constant :return: The new time constant
Query whether the device is (still) connected
Get a list of all devices for this type.
partyqueryGet the wait time required to reach 99% of the final value
Read a single value from the lock-in amplifier
resetRun SCPI code on the device by writing it
Run a command and check for errors
set_ac_gain_dbset_default_displayset_filter_slopeset_frequency_Hzset_referenceset_reference_triggerset_reserveset_sensitivity_voltset_sync_filterset_time_constant_sstart_check_overloadsTry to get into a normal state by flushing the output queue and reading the instrument status
Attributes
AC_GAINADCADC_SR830BUFFER_MAX_LENGTHCBD_BITSCBD_BITS_SR830IEOVERLOADSREAD_CMDSREFERENCE_SR830RSLPSENSLOPESTTC- classmethod add_device(connect_info)#
Manually add a specific device. The device will show up when list_devices() is called for the device type. Call this from the device class implementation, e.g. use ModelXYZ9000.add_device(‘GPIB:1234:5678’) to add a specific device with a fixed GPIB address. This is useful when automatic discovery is undesired/impossible, either because it is not implemented or it disturbs other devices which can’t handle a identification request. :param cls: The device implementation class :param connect_info: A string argument that is passed to the connect() method of the device implementation, when the device is being connected.
- buffer_get_data(start=0, n_points: int | None = None, raw=False)[source]#
Get the data from the buffer. Note that regardless of start and n_points, the whole buffer has to be transmitted every time. Doing it piece-wise for increased performance is thus useless. :return:
- buffer_get_max_size(n_values: int) int[source]#
Get the maximum buffer size for storing samples
- Parameters:
n_values – Number of values stored per sample
- Returns:
Maximum number of samples the buffer can hold
- buffer_setup(what=['R', 'Aux In 1'], length=None, sample_rate_Hz=256)[source]#
Compatibility function with same syntax as SR830 :param what: Quantities to measure. The Model7260 can measure more than 2 at a time! :param length: Number of values to measure or None to fill the buffer to the maximum.
The max length depends on how many quantities are measured.
- Parameters:
sample_rate – This will be converted to a measurement interval and rounded to 5 ms. So you might not get the exact same sample rate as with the SR830, but you can choose arbitrary values.
- buffer_start_fill()[source]#
Start a buffer measurement that was previously configured with
buffer_setup()
- check_overloads() str[source]#
Check the overload status byte
You should clear the register using “start_check_overloads()” when your measurement starts. :return: String describing which kind of overload occurred, or empty string if none occurred
- check_status() str[source]#
Check the device status
Queries the status byte and reports any error conditions. Only reports bad status bits, returning an empty string if everything is OK.
- Returns:
Empty string if all good, otherwise description of what is wrong
- classmethod connect(device_type_name: str, device_name: str | None, **kwargs) Device#
- Parameters:
device_type_name – The name of the device class
device_name – The name of the device class
- static connect_device(name)[source]#
This function should be overridden by device implementations only, and is not intended to be used directly. Instead, use list_devices() to get a list of devices, and pass the selected device type and name to connect() :param device_name: The name of the device class
- classmethod connect_dummy(**kwargs) Device#
Connect an instance of the device’s dummy implementation
- decrease_full_scale_sensitivity_volt() float[source]#
Decreases the full-scale sensitivity (output signal range) :return: The new full-scale sensitivity
- decrease_time_constant_s() float[source]#
Decreases the time constant :return: The new time constant
- classmethod get_base_classes(recurse=True) dict[str, type[Device]]#
Return a flat dictionary of all base classes below this class :param recurse: If True, recursively search for base classes :return: dict of {class name: class}
- classmethod get_device_name() str#
- Returns:
The specific type name of the device, e.g., SR830 or Keithly2600
- classmethod get_device_type_name() str#
- Returns:
The general type name of the device, e.g., Lock-In Amplifier or Voltmeter
- get_next_valid_sample_rate_Hz(target_sample_rate_Hz: int | float) int | float[source]#
Get the highest valid sample rate not exceeding the target
- Parameters:
target_sample_rate_Hz – Desired sample rate in Hz
- Returns:
The highest valid sample rate ≤ target_sample_rate_Hz
- get_status() str#
Query the status of the device and return a string describing errors. If everything is ok, empty string must be returned :return: String of device status
- increase_full_scale_sensitivity_volt() float[source]#
Increases the full-scale sensitivity (output signal range) :return: The new full-scale sensitivity
- increase_time_constant_s() float[source]#
Increases the time constant :return: The new time constant
- classmethod list_devices() list[tuple[str, str]]#
Get a list of all devices for this type. The list made up of: - Manually added devices - Available devices (those returned by _enumerate_devices) - A dummy device (if a dummy implementation exists) - List of all devices of child classes
- Returns:
list of available devices
- read_get_wait_time_s(time_const: float | None = None, filter_slope: int | None = None)#
Get the wait time required to reach 99% of the final value
Uses the rule of thumb from SR830 manual to wait 5 time constants (page 6-35) depending on the filter slope. See SR830 Manual 3-21.
- Parameters:
time_const – Time constant in seconds. If None, read from device
filter_slope – Filter slope in dB/octave. If None, read from device
- Returns:
Wait time in seconds to reach 99% of final value
- read_value(which: str, dont_log=True)[source]#
Read a single value from the lock-in amplifier
- Parameters:
which – Which value to read. Must be one of ‘X’, ‘Y’, ‘R’, ‘theta’
- Returns:
The requested value
- run(code, split=True)[source]#
Run SCPI code on the device by writing it
Empty lines, leading whitespaces and lines starting with ‘ or # are ignored.
- Parameters:
code – SCPI commands to execute
split – If True, split commands by newline and execute separately
- run_and_check(cmd, timeout_ms=3000)[source]#
Run a command and check for errors
Executes a command and monitors the status byte for errors or timeouts. Raises RuntimeError for invalid commands, parameter errors, or timeouts.
- Parameters:
cmd – SCPI command to execute
timeout_ms – Maximum time to wait for command completion in milliseconds
- Raises:
RuntimeError – For various error conditions detected via status byte
pyvisa.VisaIOError – If VISA communication fails