devctrl.devices.lock_in.base.LockInAmp#
- class LockInAmp[source]#
Bases:
DeviceMethods
Manually add a specific device.
allow_only_dummy_devicesRetrieve data from the buffer
Get the maximum buffer size for storing samples
Get the number of points currently in the buffer
Check if the target number of points are in the buffer
Configure buffer settings for data acquisition
Start a buffer measurement that was previously configured with
buffer_setup()Stop the current buffer measurement
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
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}
get_filter_slopeget_frequency_HzGet the highest valid sample rate not exceeding the target
get_reference_triggerget_sensitivity_voltQuery the status of the device and return a string describing errors.
get_sync_filterget_time_constant_sCalculate wait time to reach 99% of final value
Query whether the device is (still) connected
Get a list of all devices for this type.
Get the wait time required to reach 99% of the final value
Read a single value from the lock-in amplifier
resetrunset_filter_slopeset_frequency_Hzset_referenceset_reference_triggerset_sensitivity_voltset_sync_filterset_time_constant_s- 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.
- abstractmethod buffer_get_data(start=0, n_points: int | None = None) ndarray[source]#
Retrieve data from the buffer
- Parameters:
start – Starting index for data retrieval
n_points – Number of points to retrieve. None for all available points
- Returns:
NumPy array of shape [Q, N] where Q is number of quantities (same order as configured in ``what```parameter in
buffer_setup()and N is number of points
- abstractmethod 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
- abstractmethod buffer_get_n_points(dont_log=True) int[source]#
Get the number of points currently in the buffer
- Parameters:
dont_log – If False, log the operation
- Returns:
Number of points in buffer
- abstractmethod buffer_is_done() bool[source]#
Check if the target number of points are in the buffer
- abstractmethod buffer_setup(what=['R', 'theta'], length=None, sample_rate_Hz=512)[source]#
Configure buffer settings for data acquisition
- Parameters:
what – List of quantities to measure (e.g., [‘R’, ‘theta’])
length – Number of samples to acquire.
sample_rate_Hz – Sample rate in Hz
- abstractmethod buffer_start_fill()[source]#
Start a buffer measurement that was previously configured with
buffer_setup()
- 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
- abstractmethod classmethod connect_device(device_name: str) Device#
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
- 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[source]#
- Returns:
The general type name of the device, e.g., Lock-In Amplifier or Voltmeter
- abstractmethod 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
- classmethod get_wait_time_s(time_const: float, filter_slope: int)[source]#
Calculate wait time to reach 99% of final value
This method implements the SR830 filter slope timing rules. Subclasses with different filter slopes must override this method.
- Parameters:
time_const – Time constant in seconds
filter_slope – Filter slope in dB/octave (6, 12, 18, or 24)
- Returns:
Wait time in seconds
- Raises:
ValueError – If filter_slope is invalid
- abstractmethod is_connected() bool#
Query whether the device is (still) connected
- 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)[source]#
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