Rework radar system
This commit is contained in:
@@ -17,7 +17,7 @@ from python_app.hardware_full.matrix_radar_service import create_matrix_radar_se
|
||||
from python_app.hardware_full.multi_device_service import MultiDeviceLibreVnaService
|
||||
from python_app.hardware_full.switched_matrix_radar_service import SwitchedMatrixRadarService
|
||||
from python_app.models.dataset_model import ComboKey, SweepCollection, TraceData
|
||||
from python_app.models.run_config_model import RunConfigModel
|
||||
from python_app.models.run_config_schema import RunConfigModel
|
||||
from python_app.workflows.sequential_capture_workflow import SequentialCaptureSession
|
||||
|
||||
_INNER_INPUTS = 4
|
||||
@@ -40,17 +40,13 @@ class _FakeInnerMatrixRadar:
|
||||
def configure(self, sweep) -> None:
|
||||
pass
|
||||
|
||||
def recover(self) -> None:
|
||||
pass
|
||||
|
||||
def acquire_collection(self, collection_id: int = 1) -> SweepCollection:
|
||||
def acquire_collection(self, collection_id: int = 1, *, combo: ComboKey | None = None) -> SweepCollection:
|
||||
self.acquire_count += 1
|
||||
frequency_hz = np.linspace(1e6, 2e6, _POINTS, dtype=np.float32)
|
||||
traces = [
|
||||
TraceData(
|
||||
combo=ComboKey(input=input_pos, output=output_pos),
|
||||
frequency_hz=frequency_hz,
|
||||
s11=np.full(_POINTS, complex(self.acquire_count, 0), dtype=np.complex64),
|
||||
s21=np.full(_POINTS, complex(input_pos, output_pos), dtype=np.complex64),
|
||||
)
|
||||
for output_pos in range(_INNER_OUTPUTS)
|
||||
@@ -79,6 +75,10 @@ class _FakeSwitch:
|
||||
def position_count(self) -> int:
|
||||
return self.positions
|
||||
|
||||
@property
|
||||
def current_position(self) -> int:
|
||||
return self.switched_to[-1] if self.switched_to else 0
|
||||
|
||||
def switch_to(self, position: int) -> None:
|
||||
self.switched_to.append(int(position))
|
||||
|
||||
@@ -98,13 +98,13 @@ def _switched_service(input_steps: int = 3) -> tuple[SwitchedMatrixRadarService,
|
||||
|
||||
|
||||
class SwitchedMatrixComboAcquisitionTest(unittest.TestCase):
|
||||
"""acquire_combo_collection must acquire exactly one physical switch step."""
|
||||
"""Targeted acquire_collection must acquire exactly one physical switch step."""
|
||||
|
||||
def test_acquires_only_the_step_containing_the_combo(self) -> None:
|
||||
service, inner, input_switch = _switched_service(input_steps=3)
|
||||
|
||||
# Widened input 9 lives in physical step 9 // 4 = 2.
|
||||
collection = service.acquire_combo_collection(input_pos=9, output_pos=1)
|
||||
collection = service.acquire_collection(combo=ComboKey(9, 1))
|
||||
|
||||
self.assertEqual(inner.acquire_count, 1)
|
||||
self.assertEqual(input_switch.switched_to, [2])
|
||||
@@ -120,9 +120,9 @@ class SwitchedMatrixComboAcquisitionTest(unittest.TestCase):
|
||||
def test_rejects_out_of_range_combo(self) -> None:
|
||||
service, _inner, _input_switch = _switched_service(input_steps=3)
|
||||
with self.assertRaises(ValueError):
|
||||
service.acquire_combo_collection(input_pos=12, output_pos=0)
|
||||
service.acquire_collection(combo=ComboKey(12, 0))
|
||||
with self.assertRaises(ValueError):
|
||||
service.acquire_combo_collection(input_pos=0, output_pos=2)
|
||||
service.acquire_collection(combo=ComboKey(0, 2))
|
||||
|
||||
def test_full_collection_still_covers_widened_matrix_in_canonical_order(self) -> None:
|
||||
service, inner, input_switch = _switched_service(input_steps=3)
|
||||
@@ -197,7 +197,7 @@ class ManualComboCaptureUsesTargetedAcquisitionTest(unittest.TestCase):
|
||||
)
|
||||
session.open()
|
||||
try:
|
||||
trace = session.capture_current_combo()
|
||||
trace = session.capture_current_combo().display_trace
|
||||
finally:
|
||||
session.close()
|
||||
first_combo = config.combos[0]
|
||||
@@ -234,6 +234,7 @@ class PerPointStimulusSwitchingConfigTest(unittest.TestCase):
|
||||
config.radar.driver_mode = "native"
|
||||
service = create_matrix_radar_service(config)
|
||||
self.assertIsInstance(service, MultiDeviceLibreVnaService)
|
||||
assert isinstance(service, MultiDeviceLibreVnaService)
|
||||
self.assertNotIsInstance(service, SwitchedMatrixRadarService)
|
||||
self.assertEqual(service.output_position_count, 4)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user