JohannesDittloff b1ec523aaa add f sweep
2025-05-09 10:39:47 +02:00

134 lines
3.1 KiB
Python

from ..base import LockInAmp
from typing import Callable
from time import time as now
import numpy as np
class DummyLockInAmp(LockInAmp):
def __init__(self):
super().__init__()
def test_connection(self) -> None:
pass
# RUN COMMANDS ON THE DEVICE
def run(self, code, verbose=False):
pass
def reset(self, verbose=False):
pass
def read_value(self) -> tuple[float, float]:
"""
Read a single value
Returns
-------
[timestamp, voltage]
"""
t = now() - self.t0
v = self.amplitude * np.sin(2 * np.pi * t / self.frequency)
return t, v
def query(self, query):
return "-1"
def snap(self, what="3,4,5,7"):
vals = [-1.0 for _ in what.split(",")]
return vals
def try_recover_from_communication_error(self, original_error):
pass
def check_overloads(self) -> bool | str:
return False
def read_value(self, which: str):
return -1.0
def reset(self):
pass
def test_connection(self):
pass
# REFERENCE
def set_reference(self, reference):
self.reference = reference
def set_frequency_Hz(self, frequency_Hz):
self.frequency = frequency_Hz
def get_frequency_Hz(self) -> float:
return self.frequency
def set_reference_trigger(self, trigger):
self.reference_trigger = trigger
def set_sensitivity_volt(self, volt):
self.sensitivity_volt = volt
def get_sensitivity_volt(self):
return self.sensitivity_volt
def set_time_constant_s(self, dt):
self.time_constant_s = dt
def get_time_constant_s(self):
return self.time_constant_s
def set_filter_slope(self, slope_db_oct):
self.filter_slope = slope_db_oct
def get_filter_slope(self):
return self.filter_slope
def get_wait_time_s(self):
"""
Get the wait time required to reach 99% of the final value.
See Manual 3-21
:return:
"""
return 1.0
def set_sync_filter(self, sync):
self.sync_filter = sync
def get_sync_filter(self):
return self.sync_filter
def set_reserve(self, reserve):
self.reserve = reserve
def get_reserve(self):
return self.reserve
max_length = 16383
def buffer_setup(self, CH1="R", CH2="Theta", length=None, sample_rate=512):
if length is None:
length = self.max_length
self._buffer_length = length
def buffer_start_fill(self):
if self._buffer_length is None: raise RuntimeError(f"Buffer not set up, call buffer_setup() first.")
def buffer_is_done(self) -> bool:
return True
def buffer_get_n_points(self) -> int:
return self._buffer_length
def buffer_get_data(self, CH1=True, CH2=True):
data = []
if CH1:
data.append(np.arange(self._buffer_length))
if CH2:
data.append(np.arange(self._buffer_length))
return data
def auto_gain(self):
pass
def __str__(self):
return "Dummy Lock-In"