From 02a07da2db20c8d6194a399cf9494b2fe46f0a4e Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 11:34:12 +0000 Subject: [PATCH 01/23] WIP --- .../plugins/i15_1/auxiliary.py | 9 +++- .../plugins/i15_1/i15_1_converter.py | 43 ++++++++++--------- .../plugins/i15_1/test_i15_1_converter.py | 8 ++++ 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 061336fd..8e175b10 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -1,8 +1,9 @@ from enum import StrEnum from pathlib import Path +from typing import Self from daq_config_server.models.i15_1.standards_puck import StandardsPin -from pydantic import BaseModel, ConfigDict, computed_field +from pydantic import BaseModel, ConfigDict, Field, computed_field from daq_queuing_service.task_queue.task import Experiment @@ -43,6 +44,7 @@ class AuxiliaryScan(BaseModel): pin: StandardsPin | None time_per_pdf: float list_of_temperatures: list[int] | None = None + requires: list[Self] = Field(default_factory=lambda: []) @computed_field @property @@ -75,6 +77,10 @@ def is_suitable( elif self.list_of_temperatures: return False + for required in required_background.requires: + if not any(r.is_suitable(required) for r in self.requires): + return False + return ( self.instrument_session == required_background.instrument_session and self.pin == required_background.pin @@ -142,6 +148,7 @@ def attempt_to_combine_with( pin=self.pin, time_per_pdf=max(self.time_per_pdf, required_background.time_per_pdf), list_of_temperatures=list_of_temperatures, + requires=self.requires + required_background.requires, ) assert result.is_suitable(required_background) return result diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 5819c899..3e909428 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -302,28 +302,31 @@ def _get_required_auxiliary_scans( list_of_temperatures = get_background_temperatures(list_of_temperatures) assert experiment.sample - return [ - AuxiliaryScan( - instrument_session=experiment.instrument_session, - pin=None, - time_per_pdf=time_per_pdf, - ), - AuxiliaryScan( - instrument_session=experiment.instrument_session, - pin=StandardsPin( - capillary=experiment.sample.data["capillary"], contents=None - ), - time_per_pdf=time_per_pdf, - list_of_temperatures=list_of_temperatures, + + air = AuxiliaryScan( + instrument_session=experiment.instrument_session, + pin=None, + time_per_pdf=time_per_pdf, + ) + empty_capillary = AuxiliaryScan( + instrument_session=experiment.instrument_session, + pin=StandardsPin( + capillary=experiment.sample.data["capillary"], contents=None ), - AuxiliaryScan( - instrument_session=experiment.instrument_session, - pin=StandardsPin( - capillary=experiment.sample.data["capillary"], contents="Silicon" - ), - time_per_pdf=time_per_pdf, + time_per_pdf=time_per_pdf, + list_of_temperatures=list_of_temperatures, + requires=[air], + ) + standard_sample = AuxiliaryScan( + instrument_session=experiment.instrument_session, + pin=StandardsPin( + capillary=experiment.sample.data["capillary"], contents="Silicon" ), - ] + time_per_pdf=time_per_pdf, + requires=[air, empty_capillary], + ) + + return [standard_sample, empty_capillary, air] def _construct_auxiliary_experiment( self, auxiliary_scan: AuxiliaryScan, instrument_session: str diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index 934eb708..f7e487be 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -1103,3 +1103,11 @@ def test_no_wait_for_beam_queued_if_turned_off_in_queue_params( [TaskWithPosition.from_task(i15_1_tasks[0])], [], [] ) assert not any(call.task_request.name == "wait_for_beam" for call in blueapi_calls) + + +async def test_i15_converter_adds_auxiliary(queue_with_i15_1_plugin: TaskQueue): + queue = await queue_with_i15_1_plugin.get_queue() + a = [task.experiment.name for task in queue] + + with open("test.txt", "w") as f: + f.write(json.dumps(a, indent=2)) From be08ff8b03dfd8e5b03b381b3e7e4ac7e2b80117 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 12:18:44 +0000 Subject: [PATCH 02/23] Ensure auxiliary ordering is correct --- .../plugins/i15_1/auxiliary.py | 3 +- .../plugins/i15_1/i15_1_converter.py | 23 +++++++- .../plugins/i15_1/test_i15_1_converter.py | 54 +++++++++---------- 3 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 8e175b10..7f811eb7 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -115,7 +115,8 @@ def attempt_to_combine_with( temperature_step: int = DEFAULT_TEMPERATURE_STEP, ) -> "AuxiliaryScan | None": """Creates a background that combines the requirements of this background object - and a provided required background, if possible. + and a provided required background, if possible. Anything that previously deemed + this scan as suitable should also deem the combined scan suitable. Args: required_background (AuxiliaryScan): The required background diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 3e909428..b8ebc7d6 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -260,6 +260,7 @@ def _ensure_auxiliary_in_queue_or_tiled( ) return self._add_or_replace_auxiliary_scan( required_auxiliary, + current_task, new_tasks, queued_auxiliary_scans, instrument_session, @@ -268,10 +269,13 @@ def _ensure_auxiliary_in_queue_or_tiled( def _add_or_replace_auxiliary_scan( self, required_auxiliary: AuxiliaryScan, + current_task: TaskWithPosition | None, new_tasks: list[Task], queued_auxiliary_scans: list[tuple[int, AuxiliaryScan]], instrument_session: str, ) -> list[Task]: + # It is assumed every scan in queued_auxiliary_scans has already added their + # requirements before for them combined_auxiliary_scan = None index = None @@ -285,10 +289,25 @@ def _add_or_replace_auxiliary_scan( aux_experiment = self._construct_auxiliary_experiment( combined_auxiliary_scan or required_auxiliary, instrument_session ) + aux_task = Task(experiment=aux_experiment) + if index is None: - new_tasks.append(Task(experiment=aux_experiment)) + prefix = new_tasks + suffix = [] else: - new_tasks[index] = Task(experiment=aux_experiment) + prefix = new_tasks[:index] + suffix = new_tasks[index + 1 :] + + for required in required_auxiliary.requires: + prefix = self._ensure_auxiliary_in_queue_or_tiled( + required, + current_task, + prefix, + aux_task.id, + instrument_session, + ) + new_tasks = prefix + [aux_task] + suffix + return new_tasks def _get_required_auxiliary_scans( diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index f7e487be..e5d65bb1 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -781,19 +781,19 @@ def test_add_required_background_scans_combines_similar_background_requirements( assert ( isinstance(new_tasks[2].experiment, Experiment) and new_tasks[2].experiment.sample - and new_tasks[2].experiment.sample.name == "Silicon fq1.0" + and new_tasks[2].experiment.sample.name == "Empty fq1.0" ) assert ( - isinstance(new_tasks[6].experiment, Experiment) - and new_tasks[6].experiment.sample - and new_tasks[6].experiment.sample.name == "Empty fq1.0" + isinstance(new_tasks[3].experiment, Experiment) + and new_tasks[3].experiment.sample + and new_tasks[3].experiment.sample.name == "Silicon fq1.0" ) # Should have the maximum time_per_pdf of i15_1_tasks assert new_tasks[0].experiment.experiment_definition.data["time_per_pdf"] == 25 assert new_tasks[1].experiment.experiment_definition.data["time_per_pdf"] == 25 - assert new_tasks[2].experiment.experiment_definition.data["time_per_pdf"] == 25 + assert new_tasks[2].experiment.experiment_definition.data["time_per_pdf"] == 20 + assert new_tasks[3].experiment.experiment_definition.data["time_per_pdf"] == 25 # This one isn't a temperature experiment so needs a separate empty capillary - assert new_tasks[6].experiment.experiment_definition.data["time_per_pdf"] == 20 def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_in_each( @@ -820,29 +820,29 @@ def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_i "fq1.0", standards_puck, ) - assert new_tasks[2].model_dump() == standard_sample_task( - new_tasks[2].id, "cm12345-1", 25.0, "fq1.0", "Silicon", standards_puck + assert new_tasks[2].model_dump() == empty_capillary_task( + new_tasks[2].id, "cm12345-1", 20.0, None, "fq1.0", standards_puck + ) + assert new_tasks[3].model_dump() == standard_sample_task( + new_tasks[3].id, "cm12345-1", 25.0, "fq1.0", "Silicon", standards_puck ) - assert new_tasks[4].model_dump() == air_task(new_tasks[4].id, "different", 10.0) - assert new_tasks[5].model_dump() == empty_capillary_task( - new_tasks[5].id, "different", 10.0, [100, 200], "fq1.0", standards_puck + assert new_tasks[5].model_dump() == air_task(new_tasks[5].id, "different", 10.0) + assert new_tasks[6].model_dump() == empty_capillary_task( + new_tasks[6].id, "different", 10.0, [100, 200], "fq1.0", standards_puck ) - assert new_tasks[6].model_dump() == standard_sample_task( - new_tasks[6].id, "different", 10.0, "fq1.0", "Silicon", standards_puck + assert new_tasks[7].model_dump() == standard_sample_task( + new_tasks[7].id, "different", 10.0, "fq1.0", "Silicon", standards_puck ) - assert new_tasks[8].model_dump() == air_task( - new_tasks[8].id, "also_different", 10.0 - ) - assert new_tasks[9].model_dump() == empty_capillary_task( - new_tasks[9].id, "also_different", 10.0, [200, 300], "fq1.0", standards_puck + assert new_tasks[9].model_dump() == air_task( + new_tasks[9].id, "also_different", 10.0 ) - assert new_tasks[10].model_dump() == standard_sample_task( - new_tasks[10].id, "also_different", 10.0, "fq1.0", "Silicon", standards_puck + assert new_tasks[10].model_dump() == empty_capillary_task( + new_tasks[10].id, "also_different", 10.0, [200, 300], "fq1.0", standards_puck ) - assert new_tasks[12].model_dump() == empty_capillary_task( - new_tasks[12].id, "cm12345-1", 20.0, None, "fq1.0", standards_puck + assert new_tasks[11].model_dump() == standard_sample_task( + new_tasks[11].id, "also_different", 10.0, "fq1.0", "Silicon", standards_puck ) @@ -993,12 +993,10 @@ def test__ensure_background_in_queue_or_tiled_saves_tiled_info_if_exists( # 5 is wait_for_beam (6, ScanType.EMPTY_CAPILLARY), # 7 is robot unload - # 8 is robot load - # 9 is wait_for_beam - # 10 is centring - # 11 is wait_for_beam - (12, ScanType.STANDARD_SAMPLE), - (18, ScanType.DATA_COLLECTION), + # etc + (12, ScanType.EMPTY_CAPILLARY), + (18, ScanType.STANDARD_SAMPLE), + (24, ScanType.DATA_COLLECTION), ], ) async def test_queued_data_collections_have_correct_scan_type_parameter( From 1d8c236ae48662c265b89cf47bfe42bfc4266cbc Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 15:45:26 +0000 Subject: [PATCH 03/23] Fix bug and tests --- .../plugins/i15_1/auxiliary.py | 29 +++- .../plugins/i15_1/i15_1_converter.py | 8 +- .../plugins/i15_1/test_auxiliary.py | 160 +++++++++++++++++- .../plugins/i15_1/test_i15_1_converter.py | 105 ++++++++++-- 4 files changed, 282 insertions(+), 20 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 7f811eb7..5e22f7c2 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -1,6 +1,5 @@ from enum import StrEnum from pathlib import Path -from typing import Self from daq_config_server.models.i15_1.standards_puck import StandardsPin from pydantic import BaseModel, ConfigDict, Field, computed_field @@ -33,6 +32,25 @@ def get_background_temperatures( ) +def combine_auxiliary_requirements( + required_auxiliaries_1: list["AuxiliaryScan"], + required_auxiliaries_2: list["AuxiliaryScan"], +) -> list["AuxiliaryScan"]: + result: list[AuxiliaryScan] = [] + remaining = required_auxiliaries_2.copy() + for aux1 in required_auxiliaries_1: + for aux2 in remaining: + if combined := aux1.attempt_to_combine_with(aux2): + result.append(combined) + remaining.remove(aux2) + + break + else: + result.append(aux1) + + return result + remaining + + class AuxiliaryScan(BaseModel): """Auxiliary scans are scans added automatically by the queue, such as background scans and standard sample calibration scans. They are needed for analysis of user @@ -44,7 +62,7 @@ class AuxiliaryScan(BaseModel): pin: StandardsPin | None time_per_pdf: float list_of_temperatures: list[int] | None = None - requires: list[Self] = Field(default_factory=lambda: []) + requires: list["AuxiliaryScan"] = Field(default_factory=lambda: []) @computed_field @property @@ -149,7 +167,9 @@ def attempt_to_combine_with( pin=self.pin, time_per_pdf=max(self.time_per_pdf, required_background.time_per_pdf), list_of_temperatures=list_of_temperatures, - requires=self.requires + required_background.requires, + requires=combine_auxiliary_requirements( + self.requires, required_background.requires + ), ) assert result.is_suitable(required_background) return result @@ -175,6 +195,9 @@ def from_experiment(cls, experiment: Experiment) -> "AuxiliaryScan": list_of_temperatures=experiment.experiment_definition.data.get( "list_of_temperatures" ), + requires=experiment.experiment_definition.data.get( + "required_auxiliary_scans", [] + ), ) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index b8ebc7d6..cefb2e1e 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -313,6 +313,9 @@ def _add_or_replace_auxiliary_scan( def _get_required_auxiliary_scans( self, experiment: Experiment ) -> list[AuxiliaryScan]: + if is_auxiliary_experiment(experiment): + return experiment.experiment_definition.data["required_auxiliary_scans"] + time_per_pdf = experiment.experiment_definition.data["time_per_pdf"] list_of_temperatures = experiment.experiment_definition.data.get( "list_of_temperatures" @@ -351,7 +354,10 @@ def _construct_auxiliary_experiment( self, auxiliary_scan: AuxiliaryScan, instrument_session: str ) -> Experiment: LOGGER.debug(f"Constructing experiment for auxiliary scan: {auxiliary_scan}") - data: dict[str, Any] = {"time_per_pdf": auxiliary_scan.time_per_pdf} + data: dict[str, Any] = { + "time_per_pdf": auxiliary_scan.time_per_pdf, + "required_auxiliary_scans": auxiliary_scan.requires, + } if auxiliary_scan.list_of_temperatures: settle_time = ( self._queue_params.blower_auxiliary_collection_params.settle_time_s diff --git a/tests/unit_tests/plugins/i15_1/test_auxiliary.py b/tests/unit_tests/plugins/i15_1/test_auxiliary.py index e4784002..d17afcb5 100644 --- a/tests/unit_tests/plugins/i15_1/test_auxiliary.py +++ b/tests/unit_tests/plugins/i15_1/test_auxiliary.py @@ -1,7 +1,10 @@ import pytest from daq_config_server.models.i15_1.standards_puck import StandardsPin -from daq_queuing_service.plugins.i15_1.auxiliary import AuxiliaryScan +from daq_queuing_service.plugins.i15_1.auxiliary import ( + AuxiliaryScan, + combine_auxiliary_requirements, +) @pytest.mark.parametrize( @@ -219,3 +222,158 @@ def test_attempt_to_combine_returns_none_when_auxiliaries_cannot_be_combined( required: AuxiliaryScan, ): assert auxiliary.attempt_to_combine_with(required) is None + + +@pytest.mark.parametrize( + "auxiliaries_1, auxiliaries_2, expected_combined_auxiliaries", + [ + ( + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=None, + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=None, + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=None, + ), + ], + ), + ( + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=[100, 150], + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=None, + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=[100, 150], + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=None, + ), + ], + ), + ( + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=[100, 200], + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=[400, 500], + ), + ], + [ + AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=20.0, + list_of_temperatures=None, + ), + AuxiliaryScan( + instrument_session="cm12345-1", + pin=StandardsPin(capillary="fq1.0", contents=None), + time_per_pdf=20.0, + list_of_temperatures=[100, 200, 300, 400, 500], + ), + ], + ), + ], +) +def test_combine_auxiliary_requirements_combines_auxiliaries_as_expected( + auxiliaries_1: list[AuxiliaryScan], + auxiliaries_2: list[AuxiliaryScan], + expected_combined_auxiliaries: list[AuxiliaryScan], +): + + assert ( + combine_auxiliary_requirements(auxiliaries_1, auxiliaries_2) + == expected_combined_auxiliaries + ) diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index e5d65bb1..1033a74e 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -226,7 +226,10 @@ def air_task( "experiment_definition": { "name": "Air", "id": "", - "data": {"time_per_pdf": time_per_pdf}, + "data": { + "time_per_pdf": time_per_pdf, + "required_auxiliary_scans": [], + }, }, }, ) @@ -240,7 +243,19 @@ def empty_capillary_task( capillary: STANDARD_CAPILLARY, standards_puck: StandardsPuck, ) -> dict[str, Any]: - data: dict[str, Any] = {"time_per_pdf": time_per_pdf} + data: dict[str, Any] = { + "time_per_pdf": time_per_pdf, + "required_auxiliary_scans": [ + { + "instrument_session": instrument_session, + "pin": None, + "time_per_pdf": time_per_pdf, + "list_of_temperatures": None, + "requires": [], + "kind": AuxiliaryScanType.AIR, + }, + ], + } if list_of_temperatures is not None: data.update( { @@ -279,6 +294,36 @@ def empty_capillary_task( ) +def air_auxiliary_scan(instrument_session: str, time_per_pdf: float) -> dict[str, Any]: + return { + "instrument_session": instrument_session, + "pin": None, + "time_per_pdf": time_per_pdf, + "list_of_temperatures": None, + "requires": [], + "kind": AuxiliaryScanType.AIR, + } + + +def empty_capillary_auxiliary_scan( + instrument_session: str, + time_per_pdf: float, + list_of_temperatures: list[float] | None, + capillary: STANDARD_CAPILLARY, +) -> dict[str, Any]: + return { + "instrument_session": instrument_session, + "pin": { + "capillary": capillary, + "contents": None, + }, + "time_per_pdf": time_per_pdf, + "list_of_temperatures": list_of_temperatures, + "requires": [air_auxiliary_scan(instrument_session, time_per_pdf)], + "kind": AuxiliaryScanType.EMPTY_CAPILLARY, + } + + def standard_sample_task( task_id: str, instrument_session: str, @@ -286,7 +331,9 @@ def standard_sample_task( capillary: STANDARD_CAPILLARY, contents: STANDARD_SAMPLE, standards_puck: StandardsPuck, + required_empty_capillaries: list[dict[str, Any]], ) -> dict[str, Any]: + return create_task_dict( task_id, { @@ -311,7 +358,13 @@ def standard_sample_task( "experiment_definition": { "name": "Standard Sample", "id": "", - "data": {"time_per_pdf": time_per_pdf}, + "data": { + "time_per_pdf": time_per_pdf, + "required_auxiliary_scans": [ + air_auxiliary_scan(instrument_session, time_per_pdf) + ] + + required_empty_capillaries, + }, }, }, ) @@ -693,8 +746,15 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( tasks[1].id, "cm12345-1", 100.0, None, "fq1.0", standards_puck ) assert tasks[2].model_dump() == standard_sample_task( - tasks[2].id, "cm12345-1", 100.0, "fq1.0", "Silicon", standards_puck + tasks[2].id, + "cm12345-1", + 100.0, + "fq1.0", + "Silicon", + standards_puck, + [empty_capillary_auxiliary_scan("cm12345-1", 100.0, None, "fq1.0")], ) + assert converter._tiled_auxiliary_scans == {"1": {}} @@ -824,7 +884,18 @@ def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_i new_tasks[2].id, "cm12345-1", 20.0, None, "fq1.0", standards_puck ) assert new_tasks[3].model_dump() == standard_sample_task( - new_tasks[3].id, "cm12345-1", 25.0, "fq1.0", "Silicon", standards_puck + new_tasks[3].id, + "cm12345-1", + 25.0, + "fq1.0", + "Silicon", + standards_puck, + [ + empty_capillary_auxiliary_scan( + "cm12345-1", 25.0, [0, 100, 200, 300, 400, 500], "fq1.0" + ), + empty_capillary_auxiliary_scan("cm12345-1", 20.0, None, "fq1.0"), + ], ) assert new_tasks[5].model_dump() == air_task(new_tasks[5].id, "different", 10.0) @@ -832,7 +903,13 @@ def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_i new_tasks[6].id, "different", 10.0, [100, 200], "fq1.0", standards_puck ) assert new_tasks[7].model_dump() == standard_sample_task( - new_tasks[7].id, "different", 10.0, "fq1.0", "Silicon", standards_puck + new_tasks[7].id, + "different", + 10.0, + "fq1.0", + "Silicon", + standards_puck, + [empty_capillary_auxiliary_scan("different", 10.0, [100, 200], "fq1.0")], ) assert new_tasks[9].model_dump() == air_task( @@ -842,7 +919,13 @@ def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_i new_tasks[10].id, "also_different", 10.0, [200, 300], "fq1.0", standards_puck ) assert new_tasks[11].model_dump() == standard_sample_task( - new_tasks[11].id, "also_different", 10.0, "fq1.0", "Silicon", standards_puck + new_tasks[11].id, + "also_different", + 10.0, + "fq1.0", + "Silicon", + standards_puck, + [empty_capillary_auxiliary_scan("also_different", 10.0, [200, 300], "fq1.0")], ) @@ -1101,11 +1184,3 @@ def test_no_wait_for_beam_queued_if_turned_off_in_queue_params( [TaskWithPosition.from_task(i15_1_tasks[0])], [], [] ) assert not any(call.task_request.name == "wait_for_beam" for call in blueapi_calls) - - -async def test_i15_converter_adds_auxiliary(queue_with_i15_1_plugin: TaskQueue): - queue = await queue_with_i15_1_plugin.get_queue() - a = [task.experiment.name for task in queue] - - with open("test.txt", "w") as f: - f.write(json.dumps(a, indent=2)) From be1fcef62bcd88a28e7d579aba8bf728d08212e8 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 15:58:13 +0000 Subject: [PATCH 04/23] Ensure we get the right scan from tiled --- src/daq_queuing_service/plugins/i15_1/auxiliary.py | 6 ++++-- .../plugins/i15_1/tiled_interaction.py | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 5e22f7c2..e4b8f381 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -1,5 +1,7 @@ +from collections.abc import Sequence from enum import StrEnum from pathlib import Path +from typing import Self from daq_config_server.models.i15_1.standards_puck import StandardsPin from pydantic import BaseModel, ConfigDict, Field, computed_field @@ -33,7 +35,7 @@ def get_background_temperatures( def combine_auxiliary_requirements( - required_auxiliaries_1: list["AuxiliaryScan"], + required_auxiliaries_1: Sequence["AuxiliaryScan"], required_auxiliaries_2: list["AuxiliaryScan"], ) -> list["AuxiliaryScan"]: result: list[AuxiliaryScan] = [] @@ -62,7 +64,7 @@ class AuxiliaryScan(BaseModel): pin: StandardsPin | None time_per_pdf: float list_of_temperatures: list[int] | None = None - requires: list["AuxiliaryScan"] = Field(default_factory=lambda: []) + requires: list[Self] = Field(default_factory=lambda: []) @computed_field @property diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index 9e00504a..f9cba423 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -74,6 +74,13 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: "list_of_temperatures" ) + requires = [ + TiledAuxiliary.model_validate(auxiliary_scan) + for auxiliary_scan in start_doc["experiment_definition"]["data"] + .get("auxiliary_scans", {}) + .values() + ] + auxiliary_scan = TiledAuxiliary( tiled_id=tiled_id, instrument_session=instrument_session, @@ -83,6 +90,7 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: pin=pin, time_per_pdf=time_per_pdf, list_of_temperatures=list_of_temperatures, + requires=requires, ) if auxiliary_scan.kind != start_doc["scan_type"]: LOGGER.warning( From eea9b1ee59b47a4f6b5a5c926635c4548c073f20 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 17:43:47 +0000 Subject: [PATCH 05/23] Fix bug and add test --- .../plugins/i15_1/i15_1_converter.py | 25 ++++--- .../plugins/i15_1/test_i15_1_converter.py | 68 +++++++++++++++++-- 2 files changed, 75 insertions(+), 18 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index cefb2e1e..dd2c1981 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -52,9 +52,9 @@ ) -def _filter_auxiliary_scans(tasks: list[Task]) -> list[tuple[int, AuxiliaryScan]]: +def _filter_auxiliary_scans(tasks: list[Task]) -> list[tuple[int, str, AuxiliaryScan]]: return [ - (i, AuxiliaryScan.from_experiment(task.experiment)) + (i, task.id, AuxiliaryScan.from_experiment(task.experiment)) for i, task in enumerate(tasks) if isinstance(task.experiment, Experiment) and is_auxiliary_experiment(task.experiment) @@ -200,9 +200,7 @@ def _add_required_auxiliary_scans( for task in tasks: with add_session_to_logger(task.experiment.instrument_session): experiment = task.experiment - if isinstance(experiment, Experiment) and not is_auxiliary_experiment( - experiment - ): + if isinstance(experiment, Experiment): instrument_session = experiment.instrument_session required_auxiliary_scans = self._get_required_auxiliary_scans( @@ -242,7 +240,7 @@ def _ensure_auxiliary_in_queue_or_tiled( queued_auxiliary_scans = _filter_auxiliary_scans(new_tasks) if any( queued_auxiliary.is_suitable(required_auxiliary) - for _, queued_auxiliary in queued_auxiliary_scans + for _, _, queued_auxiliary in queued_auxiliary_scans ): return new_tasks @@ -271,34 +269,39 @@ def _add_or_replace_auxiliary_scan( required_auxiliary: AuxiliaryScan, current_task: TaskWithPosition | None, new_tasks: list[Task], - queued_auxiliary_scans: list[tuple[int, AuxiliaryScan]], + queued_auxiliary_scans: list[tuple[int, str, AuxiliaryScan]], instrument_session: str, ) -> list[Task]: # It is assumed every scan in queued_auxiliary_scans has already added their # requirements before for them combined_auxiliary_scan = None index = None + combined_task_id = None - for i, auxiliary_scan in queued_auxiliary_scans: + for i, task_id, auxiliary_scan in queued_auxiliary_scans: if combined_auxiliary_scan := auxiliary_scan.attempt_to_combine_with( required_auxiliary ): index = i + combined_task_id = task_id break aux_experiment = self._construct_auxiliary_experiment( combined_auxiliary_scan or required_auxiliary, instrument_session ) - aux_task = Task(experiment=aux_experiment) - if index is None: + if index is None or combined_task_id is None or combined_auxiliary_scan is None: + aux_task = Task(experiment=aux_experiment) prefix = new_tasks suffix = [] + additional_required = required_auxiliary.requires else: + aux_task = Task(experiment=aux_experiment, id=combined_task_id) prefix = new_tasks[:index] suffix = new_tasks[index + 1 :] + additional_required = combined_auxiliary_scan.requires - for required in required_auxiliary.requires: + for required in additional_required: prefix = self._ensure_auxiliary_in_queue_or_tiled( required, current_task, diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index 1033a74e..d5bec58b 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -6,7 +6,7 @@ import pytest from blueapi.service.model import TaskRequest -from blueapi.worker.event import TaskError +from blueapi.worker.event import TaskError, TaskResult from daq_config_server.models.i15_1.queue_parameters import QueueParameters from daq_config_server.models.i15_1.standards_puck import ( STANDARD_CAPILLARY, @@ -66,7 +66,7 @@ def i15_1_tasks(): }, ), ), - id="c5786b54-fd88-4088-8952-8d087cb47028", + id="0", blueapi_calls=[], user=None, ), @@ -94,7 +94,7 @@ def i15_1_tasks(): }, ), ), - id="7a23c7f6-eecf-4376-a5f3-40b0f221635b", + id="1", blueapi_calls=[], user=None, ), @@ -122,7 +122,7 @@ def i15_1_tasks(): }, ), ), - id="c96a85c3-cc4b-41e4-b0b5-7292956b6f7c", + id="2", blueapi_calls=[], user=None, ), @@ -143,7 +143,7 @@ def i15_1_tasks(): name="", id="", data={"time_per_pdf": 20} ), ), - id="5e2571d9-2f87-45b2-ac3b-b486e83a92d6", + id="3", blueapi_calls=[], user=None, ), @@ -171,7 +171,7 @@ def i15_1_tasks(): }, ), ), - id="098d3c5a-5bcb-43a3-acc6-c7e2ae050587", + id="4", blueapi_calls=[], user=None, ), @@ -404,7 +404,7 @@ def background_found_in_tiled(): def background_not_found_in_tiled(): with patch( "daq_queuing_service.plugins.i15_1.i15_1_converter.get_suitable_tiled_scan", - MagicMock(return_value=None), + return_value=None, ) as mock_get_suitable_tiled_background: yield mock_get_suitable_tiled_background @@ -957,6 +957,60 @@ def test_add_required_background_scans_if_found_in_tiled_then_no_background_adde } +async def test_auxiliary_scans_have_their_own_required_tiled_auxiliaries_added_to_data( + queue_with_i15_1_plugin: TaskQueue, + queue_params: QueueParameters, + background_not_found_in_tiled: MagicMock, +): + queue_params.do_wait_for_beam = False + queue = await queue_with_i15_1_plugin.get_queue() + assert [task.experiment.experiment_definition.name for task in queue[:4]] == [ # type: ignore + # Auxiliaries added to queue + ScanType.AIR, + ScanType.EMPTY_CAPILLARY, + ScanType.EMPTY_CAPILLARY, + ScanType.STANDARD_SAMPLE, + ] + + air_scan = await queue_with_i15_1_plugin.get_next_call_once_available() + air_scan.put_in_progress() + + air_tiled_scan = TiledAuxiliary( + instrument_session="cm12345-1", + tiled_id="fake_tiled_id", + pin=None, + time_per_pdf=25, + filepath=Path(""), + instrument_session_directory=Path(""), + filename="air_scan.nxs", + ) + background_not_found_in_tiled.return_value = air_tiled_scan + + await queue_with_i15_1_plugin.complete_call( + air_scan, TaskResult(outcome="success", result=None, type="None") + ) + async with queue_with_i15_1_plugin._modifying: + queue_with_i15_1_plugin._sync() + + queue = await queue_with_i15_1_plugin.get_queue() + + assert [task.experiment.experiment_definition.name for task in queue[:3]] == [ # type: ignore + ScanType.EMPTY_CAPILLARY, + ScanType.EMPTY_CAPILLARY, + ScanType.STANDARD_SAMPLE, + ] + converter = queue_with_i15_1_plugin._converter + assert isinstance(converter, I151Converter) + for task in queue: + assert ( + converter._tiled_auxiliary_scans[task.id][AuxiliaryScanType.AIR] + == air_tiled_scan + ) + assert task.blueapi_calls[2].task_request.params["metadata"][ + "auxiliary_scans" + ] == {AuxiliaryScanType.AIR: air_tiled_scan.model_dump()} + + async def test_queue_with_i15_1_converter_can_sync(queue_with_i15_1_plugin: TaskQueue): for i, task in enumerate(queue_with_i15_1_plugin._tasks.values()): task.experiment.instrument_session = str(i) From 959e0d50728e6bf91cf744a597f972fd3701f7d0 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 18:05:26 +0000 Subject: [PATCH 06/23] Update tests --- .../plugins/i15_1/tiled_interaction.py | 4 +- .../plugins/i15_1/test_tiled_interaction.py | 79 +++++++++++++++++++ 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index f9cba423..c0c3a82d 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -76,9 +76,7 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: requires = [ TiledAuxiliary.model_validate(auxiliary_scan) - for auxiliary_scan in start_doc["experiment_definition"]["data"] - .get("auxiliary_scans", {}) - .values() + for auxiliary_scan in start_doc.get("auxiliary_scans", {}).values() ] auxiliary_scan = TiledAuxiliary( diff --git a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py index 1cd01b66..53a332f0 100644 --- a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py +++ b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py @@ -10,6 +10,7 @@ from daq_queuing_service.plugins.i15_1.auxiliary import ( AuxiliaryScan, + AuxiliaryScanType, TiledAuxiliary, ) from daq_queuing_service.plugins.i15_1.tiled_interaction import ( @@ -50,6 +51,18 @@ def mock_tiled_searches( "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10001", "scan_type": "Empty Capillary", + "auxiliary_scans": { + AuxiliaryScanType.AIR.value: { + "instrument_session": "cm12345-1", + "pin": None, + "time_per_pdf": 25.0, + "list_of_temperatures": None, + "tiled_id": "tiled_id_1", + "filename": "i15-1-10000", + "instrument_session_directory": "/path/to/data/2026/cm12345-1", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + } + }, } } result_3 = MagicMock() @@ -61,6 +74,18 @@ def mock_tiled_searches( "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10002", "scan_type": "Empty Capillary", + "auxiliary_scans": { + AuxiliaryScanType.AIR.value: { + "instrument_session": "cm12345-1", + "pin": None, + "time_per_pdf": 25.0, + "list_of_temperatures": None, + "tiled_id": "tiled_id_1", + "filename": "i15-1-10000", + "instrument_session_directory": "/path/to/data/2026/cm12345-1", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + } + }, } } result_4 = MagicMock() @@ -72,6 +97,18 @@ def mock_tiled_searches( "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10003", "scan_type": "Empty Capillary", + "auxiliary_scans": { + AuxiliaryScanType.AIR.value: { + "instrument_session": "cm12345-1", + "pin": None, + "time_per_pdf": 25.0, + "list_of_temperatures": None, + "tiled_id": "tiled_id_1", + "filename": "i15-1-10000", + "instrument_session_directory": "/path/to/data/2026/cm12345-1", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + } + }, } } result_5 = MagicMock() @@ -90,6 +127,18 @@ def mock_tiled_searches( "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10004", "scan_type": "Empty Capillary", + "auxiliary_scans": { + AuxiliaryScanType.AIR.value: { + "instrument_session": "cm12345-1", + "pin": None, + "time_per_pdf": 25.0, + "list_of_temperatures": None, + "tiled_id": "tiled_id_1", + "filename": "i15-1-10000", + "instrument_session_directory": "/path/to/data/2026/cm12345-1", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + } + }, } } @@ -170,6 +219,21 @@ def test_get_suitable_tiled_background_makes_expected_searches( filename="i15-1-10001.nxs", instrument_session_directory=Path("/path/to/data/2026/cm12345-1"), filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10001.nxs"), + requires=[ + TiledAuxiliary( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=25.0, + list_of_temperatures=None, + requires=[], + tiled_id="tiled_id_1", + filename="i15-1-10000", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + instrument_session_directory=Path( + "/path/to/data/2026/cm12345-1" + ), + ) + ], ), ), ( @@ -188,6 +252,21 @@ def test_get_suitable_tiled_background_makes_expected_searches( instrument_session_directory=Path("/path/to/data/2026/cm12345-1"), filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10004.nxs"), list_of_temperatures=[100, 200, 300], + requires=[ + TiledAuxiliary( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=25.0, + list_of_temperatures=None, + requires=[], + tiled_id="tiled_id_1", + filename="i15-1-10000", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + instrument_session_directory=Path( + "/path/to/data/2026/cm12345-1" + ), + ) + ], ), ), ], From 9bf8c2552306b1558fdb86cb47b28d30c6955e9a Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 18:24:47 +0000 Subject: [PATCH 07/23] Improve docstring --- src/daq_queuing_service/plugins/i15_1/auxiliary.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index e4b8f381..076317ca 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -81,7 +81,9 @@ def is_suitable( temperature_step: int = DEFAULT_TEMPERATURE_STEP, ) -> bool: """Determine if this background is suitable compared to an experiment's required - background. + background. This includes checking that scans in required_background.requires + have a suitable pairing in self.requires, to ensure nested requirements are + taken into account. Args: required_background (AuxiliaryScan): The required background From cfd5eb50cb52551f14bae683cf009abc8312b3ef Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 18:46:14 +0000 Subject: [PATCH 08/23] Tidy --- .../plugins/i15_1/i15_1_converter.py | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index dd2c1981..190c19d5 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -1,3 +1,4 @@ +from dataclasses import dataclass, replace from functools import cached_property from typing import Any @@ -52,9 +53,16 @@ ) -def _filter_auxiliary_scans(tasks: list[Task]) -> list[tuple[int, str, AuxiliaryScan]]: +@dataclass(frozen=True) +class QueuedAuxiliary: + index: int + task_id: str + auxiliary: AuxiliaryScan + + +def _filter_auxiliary_scans(tasks: list[Task]) -> list[QueuedAuxiliary]: return [ - (i, task.id, AuxiliaryScan.from_experiment(task.experiment)) + QueuedAuxiliary(i, task.id, AuxiliaryScan.from_experiment(task.experiment)) for i, task in enumerate(tasks) if isinstance(task.experiment, Experiment) and is_auxiliary_experiment(task.experiment) @@ -239,8 +247,8 @@ def _ensure_auxiliary_in_queue_or_tiled( queued_auxiliary_scans = _filter_auxiliary_scans(new_tasks) if any( - queued_auxiliary.is_suitable(required_auxiliary) - for _, _, queued_auxiliary in queued_auxiliary_scans + queued_auxiliary.auxiliary.is_suitable(required_auxiliary) + for queued_auxiliary in queued_auxiliary_scans ): return new_tasks @@ -269,37 +277,40 @@ def _add_or_replace_auxiliary_scan( required_auxiliary: AuxiliaryScan, current_task: TaskWithPosition | None, new_tasks: list[Task], - queued_auxiliary_scans: list[tuple[int, str, AuxiliaryScan]], + queued_auxiliary_scans: list[QueuedAuxiliary], instrument_session: str, ) -> list[Task]: # It is assumed every scan in queued_auxiliary_scans has already added their # requirements before for them - combined_auxiliary_scan = None - index = None - combined_task_id = None - - for i, task_id, auxiliary_scan in queued_auxiliary_scans: - if combined_auxiliary_scan := auxiliary_scan.attempt_to_combine_with( - required_auxiliary + combined_auxiliary = None + + for queued_auxiliary in queued_auxiliary_scans: + if ( + combined_auxiliary_scan + := queued_auxiliary.auxiliary.attempt_to_combine_with( + required_auxiliary + ) ): - index = i - combined_task_id = task_id + combined_auxiliary = replace( + queued_auxiliary, auxiliary=combined_auxiliary_scan + ) break aux_experiment = self._construct_auxiliary_experiment( - combined_auxiliary_scan or required_auxiliary, instrument_session + combined_auxiliary.auxiliary if combined_auxiliary else required_auxiliary, + instrument_session, ) - if index is None or combined_task_id is None or combined_auxiliary_scan is None: + if combined_auxiliary is None: aux_task = Task(experiment=aux_experiment) prefix = new_tasks suffix = [] additional_required = required_auxiliary.requires else: - aux_task = Task(experiment=aux_experiment, id=combined_task_id) - prefix = new_tasks[:index] - suffix = new_tasks[index + 1 :] - additional_required = combined_auxiliary_scan.requires + aux_task = Task(experiment=aux_experiment, id=combined_auxiliary.task_id) + prefix = new_tasks[: combined_auxiliary.index] + suffix = new_tasks[combined_auxiliary.index + 1 :] + additional_required = combined_auxiliary.auxiliary.requires for required in additional_required: prefix = self._ensure_auxiliary_in_queue_or_tiled( From b00c61a872feda41a882a001226cbc660568efc8 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Mon, 9 Nov 2026 18:49:05 +0000 Subject: [PATCH 09/23] Tidy --- .../plugins/i15_1/i15_1_converter.py | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 190c19d5..8a2f4199 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -282,19 +282,9 @@ def _add_or_replace_auxiliary_scan( ) -> list[Task]: # It is assumed every scan in queued_auxiliary_scans has already added their # requirements before for them - combined_auxiliary = None - - for queued_auxiliary in queued_auxiliary_scans: - if ( - combined_auxiliary_scan - := queued_auxiliary.auxiliary.attempt_to_combine_with( - required_auxiliary - ) - ): - combined_auxiliary = replace( - queued_auxiliary, auxiliary=combined_auxiliary_scan - ) - break + combined_auxiliary = self._find_combinable_auxiliary( + required_auxiliary, queued_auxiliary_scans + ) aux_experiment = self._construct_auxiliary_experiment( combined_auxiliary.auxiliary if combined_auxiliary else required_auxiliary, @@ -324,6 +314,20 @@ def _add_or_replace_auxiliary_scan( return new_tasks + def _find_combinable_auxiliary( + self, + required_auxiliary: AuxiliaryScan, + queued_auxiliary_scans: list[QueuedAuxiliary], + ): + for queued_auxiliary in queued_auxiliary_scans: + if ( + combined_auxiliary_scan + := queued_auxiliary.auxiliary.attempt_to_combine_with( + required_auxiliary + ) + ): + return replace(queued_auxiliary, auxiliary=combined_auxiliary_scan) + def _get_required_auxiliary_scans( self, experiment: Experiment ) -> list[AuxiliaryScan]: From 003596787aee1d6e6057bb032a18c29f6d0969ca Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 12:18:44 +0000 Subject: [PATCH 10/23] Add some docs --- .../beamlines/i15-1/auxiliary_scans.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/explanations/beamlines/i15-1/auxiliary_scans.md diff --git a/docs/explanations/beamlines/i15-1/auxiliary_scans.md b/docs/explanations/beamlines/i15-1/auxiliary_scans.md new file mode 100644 index 00000000..f0bbca91 --- /dev/null +++ b/docs/explanations/beamlines/i15-1/auxiliary_scans.md @@ -0,0 +1,23 @@ +# I15-1 Auxiliary Scans + +I15-1 PDF experiments require some scans to be run before hand, for use during analysis. For each experiment, we also need + +- air scan, at room temperature +- empty capillary scan, matching the capillary type and temperature range to the experiment +- standard sample, at room temperature, matching the capillary type to the experiment + +These must happen in this order, as the analysis process is layered - i.e, the empty capillary scan needs the air scan to be processed, the standard sample needs the empty capillary, and therefore the air, and the actual experiment needs all three. Additionally, to save time, we can merge these auxiliary scans together, to avoid queuing up three additional scans for every experiment. For example, experiments can always share an air scan (as it's always the same); empty capillary scans can be shared as long as the temperature range spans the range of the experiment, and the capillary type is the same; and standard sample scans can be shared as long as the capillary type is the same. + +The above requirements lead to the following logic: + +- An experiment will require the three auxiliary scans outlined above, the details of which will be a function of the experiment parameters. See `I151Converter._get_required_auxiliary_scans` +- An `AuxiliaryScan` has a `requires` field, which details the other required auxiliary scans that must proceed it. The `AuxiliaryScan` objects produced by `I151Converter._get_required_auxiliary_scans` have each other as requirements. The empty capillary scan will be required by the standard sample scan, and the air scan will be required by both the other two. + +To add auxiliary scans, we build a new queue that includes the tasks along with their auxiliary scans. For each task in the queue, we will: + +- Gather the required auxiliary scans +- For each required auxiliary scan: +- Check whether a matching auxiliary scan already exists in the queue or tiled. For an existing scan to be considered suitable, all of the required auxiliary scan's own required auxiliary scans must also be required by the existing scan. +- If a suitable existing does not exist, we will see if we can combine the required auxiliary scan with an existing scan. This, for example, could involve expanding the temperature range of a queued auxiliary scan. Combining these auxiliary scans also combines the requirements of both scans, so no requirement information is lost, but we also don't duplicate similar requirements. We then go to the beginning of this checklist, and repeat for the required auxiliary scans of the combined auxiliary scan, inserting the results before the combined scan in the queue. +- If we cannot combine the required auxiliary scan, we will add the auxiliary scan to the queue. However, right before we do this, we will go through the required auxiliary scans of the auxiliary scan we added, and repeat this checklist for them. This ensures the auxiliary scan is added behind its requirements. +- Once all the recursive adding of required auxiliary scans is complete, we add the task itself to the new queue. From 1319a6d5a23461ba6cc8a274a66edb5c4004a552 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 12:45:10 +0000 Subject: [PATCH 11/23] Update flowchart --- .../i15-1/backgrounds_logic.drawio.png | Bin 68562 -> 0 bytes .../beamlines/i15-1/i15-1 aux scans.drawio.png | Bin 0 -> 90745 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/explanations/beamlines/i15-1/backgrounds_logic.drawio.png create mode 100644 docs/explanations/beamlines/i15-1/i15-1 aux scans.drawio.png diff --git a/docs/explanations/beamlines/i15-1/backgrounds_logic.drawio.png b/docs/explanations/beamlines/i15-1/backgrounds_logic.drawio.png deleted file mode 100644 index 8670a22c5555c9f3b586839b6f40461c58ad55fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68562 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 A5C8xG diff --git a/docs/explanations/beamlines/i15-1/i15-1 aux scans.drawio.png b/docs/explanations/beamlines/i15-1/i15-1 aux scans.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a94aae81dfb8e6f874d2be8b6c17cab977d9b60c GIT binary patch literal 90745 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 BRKNfL literal 0 HcmV?d00001 From bea4217b8eb0dbc631998d6a11c0b9927051be9e Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 13:52:24 +0000 Subject: [PATCH 12/23] Fix docs --- docs/explanations/beamlines/beamlines.md | 8 ++++++ .../beamlines/i15-1/auxiliary_scans.md | 8 +++--- docs/explanations/beamlines/i15-1/i15-1.md | 8 ++++++ docs/explanations/plugins.md | 8 ++++++ docs/reference/rest_api.json | 25 +++---------------- 5 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 docs/explanations/beamlines/beamlines.md create mode 100644 docs/explanations/beamlines/i15-1/i15-1.md create mode 100644 docs/explanations/plugins.md diff --git a/docs/explanations/beamlines/beamlines.md b/docs/explanations/beamlines/beamlines.md new file mode 100644 index 00000000..34448750 --- /dev/null +++ b/docs/explanations/beamlines/beamlines.md @@ -0,0 +1,8 @@ +# Reference + +```{toctree} +:maxdepth: 1 +:glob: + +i15-1 +``` diff --git a/docs/explanations/beamlines/i15-1/auxiliary_scans.md b/docs/explanations/beamlines/i15-1/auxiliary_scans.md index f0bbca91..23ac2d6e 100644 --- a/docs/explanations/beamlines/i15-1/auxiliary_scans.md +++ b/docs/explanations/beamlines/i15-1/auxiliary_scans.md @@ -1,10 +1,10 @@ # I15-1 Auxiliary Scans -I15-1 PDF experiments require some scans to be run before hand, for use during analysis. For each experiment, we also need +I15-1 PDF experiments require some scans to be run before hand, for use during analysis. These are added to the queue automatically by the i15-1 queue plugin. For each experiment, we need: -- air scan, at room temperature -- empty capillary scan, matching the capillary type and temperature range to the experiment -- standard sample, at room temperature, matching the capillary type to the experiment +- an air scan, at room temperature +- an empty capillary scan, matching the capillary type and temperature range to the experiment +- a standard sample scan, at room temperature, matching the capillary type to the experiment These must happen in this order, as the analysis process is layered - i.e, the empty capillary scan needs the air scan to be processed, the standard sample needs the empty capillary, and therefore the air, and the actual experiment needs all three. Additionally, to save time, we can merge these auxiliary scans together, to avoid queuing up three additional scans for every experiment. For example, experiments can always share an air scan (as it's always the same); empty capillary scans can be shared as long as the temperature range spans the range of the experiment, and the capillary type is the same; and standard sample scans can be shared as long as the capillary type is the same. diff --git a/docs/explanations/beamlines/i15-1/i15-1.md b/docs/explanations/beamlines/i15-1/i15-1.md new file mode 100644 index 00000000..286e5090 --- /dev/null +++ b/docs/explanations/beamlines/i15-1/i15-1.md @@ -0,0 +1,8 @@ +# Reference + +```{toctree} +:maxdepth: 1 +:glob: + +auxiliary_scans +``` diff --git a/docs/explanations/plugins.md b/docs/explanations/plugins.md new file mode 100644 index 00000000..a16531a9 --- /dev/null +++ b/docs/explanations/plugins.md @@ -0,0 +1,8 @@ +# Beamlines + +```{toctree} +:maxdepth: 1 +:glob: + +beamlines +``` diff --git a/docs/reference/rest_api.json b/docs/reference/rest_api.json index c93877bf..0785aa54 100644 --- a/docs/reference/rest_api.json +++ b/docs/reference/rest_api.json @@ -1072,29 +1072,9 @@ "OIDCConfig": { "properties": { "well_known_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], + "type": "string", "title": "Well Known Url", - "description": "URL to fetch OIDC config from the provider", - "deprecated": true - }, - "issuer": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Issuer", - "description": "URL of OIDC provider" + "description": "URL to fetch OIDC config from the provider" }, "client_id": { "type": "string", @@ -1117,6 +1097,7 @@ "additionalProperties": false, "type": "object", "required": [ + "well_known_url", "client_id" ], "title": "OIDCConfig" From 260464aea5810983d1f99f30c6cc8a390b76a639 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 13:54:29 +0000 Subject: [PATCH 13/23] Fix docs --- docs/explanations/{plugins.md => beamlines.md} | 2 +- docs/explanations/beamlines/beamlines.md | 8 -------- docs/explanations/beamlines/i15-1/auxiliary_scans.md | 2 +- docs/explanations/beamlines/i15-1/i15-1.md | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) rename docs/explanations/{plugins.md => beamlines.md} (60%) delete mode 100644 docs/explanations/beamlines/beamlines.md diff --git a/docs/explanations/plugins.md b/docs/explanations/beamlines.md similarity index 60% rename from docs/explanations/plugins.md rename to docs/explanations/beamlines.md index a16531a9..495a3390 100644 --- a/docs/explanations/plugins.md +++ b/docs/explanations/beamlines.md @@ -4,5 +4,5 @@ :maxdepth: 1 :glob: -beamlines +beamlines ``` diff --git a/docs/explanations/beamlines/beamlines.md b/docs/explanations/beamlines/beamlines.md deleted file mode 100644 index 34448750..00000000 --- a/docs/explanations/beamlines/beamlines.md +++ /dev/null @@ -1,8 +0,0 @@ -# Reference - -```{toctree} -:maxdepth: 1 -:glob: - -i15-1 -``` diff --git a/docs/explanations/beamlines/i15-1/auxiliary_scans.md b/docs/explanations/beamlines/i15-1/auxiliary_scans.md index 23ac2d6e..a8bb3bbf 100644 --- a/docs/explanations/beamlines/i15-1/auxiliary_scans.md +++ b/docs/explanations/beamlines/i15-1/auxiliary_scans.md @@ -1,4 +1,4 @@ -# I15-1 Auxiliary Scans +# i15-1 Auxiliary Scans I15-1 PDF experiments require some scans to be run before hand, for use during analysis. These are added to the queue automatically by the i15-1 queue plugin. For each experiment, we need: diff --git a/docs/explanations/beamlines/i15-1/i15-1.md b/docs/explanations/beamlines/i15-1/i15-1.md index 286e5090..15063c8f 100644 --- a/docs/explanations/beamlines/i15-1/i15-1.md +++ b/docs/explanations/beamlines/i15-1/i15-1.md @@ -1,4 +1,4 @@ -# Reference +# i15-1 ```{toctree} :maxdepth: 1 From ab343bbd806f5976c3e4bebab2fd057d60941c00 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 13:55:18 +0000 Subject: [PATCH 14/23] Fix docs again --- docs/explanations/beamlines.md | 2 +- docs/explanations/beamlines/i15-1/i15-1.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/explanations/beamlines.md b/docs/explanations/beamlines.md index 495a3390..47e64241 100644 --- a/docs/explanations/beamlines.md +++ b/docs/explanations/beamlines.md @@ -4,5 +4,5 @@ :maxdepth: 1 :glob: -beamlines +i15-1 ``` diff --git a/docs/explanations/beamlines/i15-1/i15-1.md b/docs/explanations/beamlines/i15-1/i15-1.md index 15063c8f..63aaf926 100644 --- a/docs/explanations/beamlines/i15-1/i15-1.md +++ b/docs/explanations/beamlines/i15-1/i15-1.md @@ -4,5 +4,5 @@ :maxdepth: 1 :glob: -auxiliary_scans +Auxiliary Scans ``` From 178927ec361a1c352bd24b84512214abdeab46cd Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 14:05:53 +0000 Subject: [PATCH 15/23] Fix docs --- .../beamlines/i15-1/auxiliary_scans.md | 2 ++ ...s.drawio.png => i15-1_aux_scans.drawio.png} | Bin docs/explanations/beamlines/i15-1/image.png | Bin 0 -> 169293 bytes 3 files changed, 2 insertions(+) rename docs/explanations/beamlines/i15-1/{i15-1 aux scans.drawio.png => i15-1_aux_scans.drawio.png} (100%) create mode 100644 docs/explanations/beamlines/i15-1/image.png diff --git a/docs/explanations/beamlines/i15-1/auxiliary_scans.md b/docs/explanations/beamlines/i15-1/auxiliary_scans.md index a8bb3bbf..adf40b41 100644 --- a/docs/explanations/beamlines/i15-1/auxiliary_scans.md +++ b/docs/explanations/beamlines/i15-1/auxiliary_scans.md @@ -21,3 +21,5 @@ To add auxiliary scans, we build a new queue that includes the tasks along with - If a suitable existing does not exist, we will see if we can combine the required auxiliary scan with an existing scan. This, for example, could involve expanding the temperature range of a queued auxiliary scan. Combining these auxiliary scans also combines the requirements of both scans, so no requirement information is lost, but we also don't duplicate similar requirements. We then go to the beginning of this checklist, and repeat for the required auxiliary scans of the combined auxiliary scan, inserting the results before the combined scan in the queue. - If we cannot combine the required auxiliary scan, we will add the auxiliary scan to the queue. However, right before we do this, we will go through the required auxiliary scans of the auxiliary scan we added, and repeat this checklist for them. This ensures the auxiliary scan is added behind its requirements. - Once all the recursive adding of required auxiliary scans is complete, we add the task itself to the new queue. + +![Auxiliary scan logic flowchart](./i15-1_aux_scans.drawio.png) diff --git a/docs/explanations/beamlines/i15-1/i15-1 aux scans.drawio.png b/docs/explanations/beamlines/i15-1/i15-1_aux_scans.drawio.png similarity index 100% rename from docs/explanations/beamlines/i15-1/i15-1 aux scans.drawio.png rename to docs/explanations/beamlines/i15-1/i15-1_aux_scans.drawio.png diff --git a/docs/explanations/beamlines/i15-1/image.png b/docs/explanations/beamlines/i15-1/image.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1b2ddda6f1ab65af1ddf212dbf9f0732664c92 GIT binary patch literal 169293 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 literal 0 HcmV?d00001 From 2c59f0f0dd26ee19c400727be4268f3b1fa3f595 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 14:09:33 +0000 Subject: [PATCH 16/23] Remove image --- docs/explanations/beamlines/i15-1/image.png | Bin 169293 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/explanations/beamlines/i15-1/image.png diff --git a/docs/explanations/beamlines/i15-1/image.png b/docs/explanations/beamlines/i15-1/image.png deleted file mode 100644 index cb1b2ddda6f1ab65af1ddf212dbf9f0732664c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169293 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 From e771d17f7f3a76280f0eacde4e22317f7b6bba23 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 17:29:48 +0000 Subject: [PATCH 17/23] Fix tiled queries for new node structure --- .../external_interaction/tiled/tiled.py | 19 +++++---- .../plugins/i15_1/tiled_interaction.py | 5 ++- src/daq_queuing_service/task_queue/queue.py | 13 +++++- .../external_interaction/tiled/test_tiled.py | 34 ++++++++------- .../plugins/i15_1/test_tiled_interaction.py | 41 +++++++------------ 5 files changed, 55 insertions(+), 57 deletions(-) diff --git a/src/daq_queuing_service/external_interaction/tiled/tiled.py b/src/daq_queuing_service/external_interaction/tiled/tiled.py index 3e3b7b96..40966a7a 100644 --- a/src/daq_queuing_service/external_interaction/tiled/tiled.py +++ b/src/daq_queuing_service/external_interaction/tiled/tiled.py @@ -55,16 +55,19 @@ def get_tiled_client( def get_metadata_from_tiled( - tiled_client: Container, instrument_session: str, blueapi_task_id: str + tiled_client: Container, + instrument: str, + instrument_session: str, + blueapi_task_id: str, ) -> list[tuple[str, dict[str, Any]]]: @cached(cache) def _query_tiled( - instrument_session: str, blueapi_task_id: str + instrument: str, instrument_session: str, blueapi_task_id: str ) -> list[tuple[str, dict[str, Any]]]: - result: Container = tiled_client.search( - Eq("start.instrument_session", instrument_session) - ).search(Eq("start.blueapi_task_id", blueapi_task_id)) + result: Container = tiled_client[ + f"{instrument}/{instrument_session.split('-')[0]}/{instrument_session}" + ].search(Eq("start.blueapi_task_id", blueapi_task_id)) items = sorted( ((key, dict(value.metadata)) for key, value in result.items()), @@ -72,10 +75,10 @@ def _query_tiled( ) return items - return _query_tiled(instrument_session, blueapi_task_id) + return _query_tiled(instrument, instrument_session, blueapi_task_id) -def get_tiled_and_scan_ids(tiled_client: Container, call: BlueapiCall): +def get_tiled_and_scan_ids(tiled_client: Container, instrument: str, call: BlueapiCall): tiled_ids: list[str] = [] scan_ids: list[int] = [] @@ -84,7 +87,7 @@ def get_tiled_and_scan_ids(tiled_client: Container, call: BlueapiCall): return tiled_ids, scan_ids scan_metadatas = get_metadata_from_tiled( - tiled_client, call.task_request.instrument_session, call.blueapi_id + tiled_client, instrument, call.task_request.instrument_session, call.blueapi_id ) for item in scan_metadatas: diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index 9e00504a..78520c42 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -31,8 +31,9 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: oldest_valid_time = time.time() - stale_time_s result: Container = ( - tiled_client.search(Eq("start.instrument", "i15-1")) - .search(Eq("start.instrument_session", instrument_session)) + tiled_client[ + f"i15-1/{instrument_session.split('-')[0]}/{instrument_session}" + ] .search(Eq("stop.exit_status", "success")) .search(Comparison("ge", "stop.time", oldest_valid_time)) .search(In("start.scan_type", list(AuxiliaryScanType))) diff --git a/src/daq_queuing_service/task_queue/queue.py b/src/daq_queuing_service/task_queue/queue.py index 4894d1fa..364d1b74 100644 --- a/src/daq_queuing_service/task_queue/queue.py +++ b/src/daq_queuing_service/task_queue/queue.py @@ -354,7 +354,11 @@ async def complete_call(self, call: BlueapiCall, result: TaskResult): result (TaskResult): The result of the task from blueapi """ with add_session_to_logger(call.task_request.instrument_session): - tiled_ids, scan_ids = get_tiled_and_scan_ids(self._tiled_client, call) + tiled_ids, scan_ids = ( + get_tiled_and_scan_ids(self._tiled_client, self.instrument, call) + if self.instrument + else ([], []) + ) should_pause = self._converter.pause_on_complete_blueapi_call( call.model_copy(), result ) @@ -383,7 +387,12 @@ async def fail_call( should_pause = self._converter.pause_on_fail_blueapi_call( call.model_copy(), errors ) - tiled_ids, scan_ids = get_tiled_and_scan_ids(self._tiled_client, call) + + tiled_ids, scan_ids = ( + get_tiled_and_scan_ids(self._tiled_client, self.instrument, call) + if self.instrument + else ([], []) + ) LOGGER.error(f"Plan {call} has failed with the following errors: {errors}") async with self._modifying: diff --git a/tests/unit_tests/external_interaction/tiled/test_tiled.py b/tests/unit_tests/external_interaction/tiled/test_tiled.py index 7009797a..4c4c137e 100644 --- a/tests/unit_tests/external_interaction/tiled/test_tiled.py +++ b/tests/unit_tests/external_interaction/tiled/test_tiled.py @@ -39,14 +39,13 @@ def mock_tiled_search( } } - search_result = MagicMock() - search_result.search = MagicMock( + search_result = MagicMock( return_value={"tiled_id_1": result_1, "tiled_id_2": result_2} ) - tiled_client.search = MagicMock(return_value=search_result) + tiled_client["ixx/cm12345/cm12345-1"].search = search_result - return (tiled_client, search_result) + return tiled_client def test_get_tiled_client_instantiates_client_from_uri(): @@ -104,22 +103,21 @@ def get_next_env_variable(*_, **__): # type:ignore ) -def test_get_metadata_from_tiled_makes_expected_searches( - mock_tiled_search: tuple[MagicMock, MagicMock], +def test_get_metadata_from_tiled_makes_expected_search( + mock_tiled_search: MagicMock, ): - client, result = mock_tiled_search - get_metadata_from_tiled(client, "cm12345-1", "bapi_task_id") - client.search.assert_called_once_with( - Eq(key="start.instrument_session", value="cm12345-1") + client = mock_tiled_search + get_metadata_from_tiled(client, "ixx", "cm12345-1", "bapi_task_id") + client["ixx/cm12345/cm12345-1"].search.assert_called_once_with( # type:ignore + Eq("start.blueapi_task_id", "bapi_task_id") ) - result.search.assert_called_once_with(Eq("start.blueapi_task_id", "bapi_task_id")) def test_get_metadata_from_tiled_returns_expected_result( - mock_tiled_search: tuple[MagicMock, MagicMock], + mock_tiled_search: MagicMock, ): - client, _ = mock_tiled_search - result = get_metadata_from_tiled(client, "cm12345-1", "bapi_task_id") + client = mock_tiled_search + result = get_metadata_from_tiled(client, "ixx", "cm12345-1", "bapi_task_id") assert result == [ # Should be in chronological order ( "tiled_id_2", @@ -149,9 +147,9 @@ def test_get_metadata_from_tiled_returns_expected_result( def test_get_metadata_from_tiled_returns_empty_list_if_no_result_found( - mock_tiled_search: tuple[MagicMock, MagicMock], + mock_tiled_search: MagicMock, ): - client, search = mock_tiled_search - search.search = MagicMock(return_value={}) - result = get_metadata_from_tiled(client, "cm12345-1", "bapi_task_id") + client = mock_tiled_search + client["ixx/cm12345/cm12345-1"].search = MagicMock(return_value={}) + result = get_metadata_from_tiled(client, "ixx", "cm12345-1", "bapi_task_id") assert result == [] diff --git a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py index 1cd01b66..b3e6edaa 100644 --- a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py +++ b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py @@ -28,7 +28,7 @@ def mock_current_time(): @pytest.fixture() def mock_tiled_searches( tiled_client: MagicMock, -) -> tuple[MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock]: +) -> tuple[MagicMock, MagicMock, MagicMock, MagicMock]: result_1 = MagicMock() result_1.metadata = { @@ -93,8 +93,8 @@ def mock_tiled_searches( } } - search_result_6 = MagicMock() - search_result_6.search = MagicMock( + search_result_4 = MagicMock() + search_result_4.search = MagicMock( return_value={ "tiled_id_1": result_1, "tiled_id_2": result_2, @@ -104,51 +104,38 @@ def mock_tiled_searches( } ) - search_result_5 = MagicMock() - search_result_5.search = MagicMock(return_value=search_result_6) - search_result_4 = MagicMock() - search_result_4.search = MagicMock(return_value=search_result_5) search_result_3 = MagicMock() search_result_3.search = MagicMock(return_value=search_result_4) search_result_2 = MagicMock() search_result_2.search = MagicMock(return_value=search_result_3) - tiled_client.search = MagicMock(return_value=search_result_2) - - return ( - tiled_client, - search_result_2, - search_result_3, - search_result_4, - search_result_5, - search_result_6, + tiled_client["i15-1/cm12345/cm12345-1"].search = MagicMock( + return_value=search_result_2 ) + return (tiled_client, search_result_2, search_result_3, search_result_4) + def test_get_suitable_tiled_background_makes_expected_searches( - mock_tiled_searches: tuple[ - MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock - ], + mock_tiled_searches: tuple[MagicMock, MagicMock, MagicMock, MagicMock], queue_params: QueueParameters, ): - client, search_2, search_3, search_4, search_5, search_6 = mock_tiled_searches + client, search_2, search_3, search_4 = mock_tiled_searches get_suitable_tiled_scan( client, AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=10), queue_params.tiled_stale_time_s, ) - client.search.assert_called_once_with(Eq(key="start.instrument", value="i15-1")) - search_2.search.assert_called_once_with( - Eq(key="start.instrument_session", value="cm12345-1") + client["i15-1/cm12345/cm12345-1"].search.assert_called_once_with( # type: ignore + Eq("stop.exit_status", "success") ) - search_3.search.assert_called_once_with(Eq("stop.exit_status", "success")) - search_4.search.assert_called_once_with( + search_2.search.assert_called_once_with( Comparison("ge", "stop.time", 30 - queue_params.tiled_stale_time_s) ) - search_5.search.assert_called_once_with( + search_3.search.assert_called_once_with( In(key="start.scan_type", value=["Air", "Empty Capillary", "Standard Sample"]) ) - search_6.search.assert_called_once_with( + search_4.search.assert_called_once_with( KeyPresent("start.experiment_definition.data.time_per_pdf") ) From 1b2d734949853df46d3a12b2b0202658073c6a7b Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 17:49:03 +0000 Subject: [PATCH 18/23] Fix bug --- src/daq_queuing_service/plugins/i15_1/i15_1_converter.py | 1 + tests/unit_tests/plugins/i15_1/test_i15_1_converter.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 8a2f4199..14e0beb1 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -302,6 +302,7 @@ def _add_or_replace_auxiliary_scan( suffix = new_tasks[combined_auxiliary.index + 1 :] additional_required = combined_auxiliary.auxiliary.requires + self._tiled_auxiliary_scans[aux_task.id] = {} for required in additional_required: prefix = self._ensure_auxiliary_in_queue_or_tiled( required, diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index d5bec58b..736872cf 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -2,7 +2,7 @@ from copy import deepcopy from pathlib import Path from typing import Any -from unittest.mock import MagicMock, patch +from unittest.mock import ANY, MagicMock, patch import pytest from blueapi.service.model import TaskRequest @@ -755,7 +755,7 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( [empty_capillary_auxiliary_scan("cm12345-1", 100.0, None, "fq1.0")], ) - assert converter._tiled_auxiliary_scans == {"1": {}} + assert list(converter._tiled_auxiliary_scans.values()) == [{}, {}, {}, {}] def test_add_required_background_scans_does_not_add_the_same_background_twice( From b536f58069eb003cd49a22befe9764e8e269d2da Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 10 Nov 2026 17:51:57 +0000 Subject: [PATCH 19/23] Fix lint --- tests/unit_tests/plugins/i15_1/test_i15_1_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index 736872cf..c8be1d44 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -2,7 +2,7 @@ from copy import deepcopy from pathlib import Path from typing import Any -from unittest.mock import ANY, MagicMock, patch +from unittest.mock import MagicMock, patch import pytest from blueapi.service.model import TaskRequest From 2f6a850933b446ace3455f4af9d39b56794cda61 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Wed, 11 Nov 2026 15:30:25 +0000 Subject: [PATCH 20/23] Don't add list to metadata --- .../plugins/i15_1/auxiliary.py | 2 +- .../plugins/i15_1/tiled_interaction.py | 123 ++++++++++-------- .../plugins/i15_1/test_i15_1_converter.py | 3 - .../plugins/i15_1/test_tiled_interaction.py | 26 ++-- 4 files changed, 81 insertions(+), 73 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 076317ca..24234850 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -64,7 +64,7 @@ class AuxiliaryScan(BaseModel): pin: StandardsPin | None time_per_pdf: float list_of_temperatures: list[int] | None = None - requires: list[Self] = Field(default_factory=lambda: []) + requires: list[Self] = Field(default_factory=lambda: [], exclude=True) @computed_field @property diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index 7ad42519..3f88b17c 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -40,65 +40,22 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: .search(KeyPresent("start.experiment_definition.data.time_per_pdf")) ) - items = sorted( - ((key, value) for key, value in result.items()), - key=lambda item: item[1].metadata["start"]["time"], - reverse=True, - ) - - auxiliary_scans: list[TiledAuxiliary] = [] - - for item in items: - tiled_id = item[0] - start_doc = item[1].metadata["start"] - filename = f"{start_doc['scan_file']}.nxs" - instrument_session_directory = Path(start_doc["data_session_directory"]) - filepath = instrument_session_directory / filename - - sample = start_doc.get("sample_info") - - if sample is None: - pin = None - else: - capillary = sample["data"].get("capillary") - if not capillary: - LOGGER.warning( - f"No capillary found for tiled scan '{tiled_id}'. Skipping." - ) - continue - pin = StandardsPin( - capillary=sample["data"]["capillary"], - contents=sample["data"].get("composition"), - ) - time_per_pdf = start_doc["experiment_definition"]["data"]["time_per_pdf"] - list_of_temperatures = start_doc["experiment_definition"]["data"].get( - "list_of_temperatures" + tiled_ids = [ + item[0] + for item in sorted( + result.items(), + key=lambda item: item[1].metadata["start"]["time"], + reverse=True, ) + ] - requires = [ - TiledAuxiliary.model_validate(auxiliary_scan) - for auxiliary_scan in start_doc.get("auxiliary_scans", {}).values() - ] + auxiliary_scans: list[TiledAuxiliary] = [] - auxiliary_scan = TiledAuxiliary( - tiled_id=tiled_id, - instrument_session=instrument_session, - filename=filename, - instrument_session_directory=instrument_session_directory, - filepath=filepath, - pin=pin, - time_per_pdf=time_per_pdf, - list_of_temperatures=list_of_temperatures, - requires=requires, - ) - if auxiliary_scan.kind != start_doc["scan_type"]: - LOGGER.warning( - f"Inferred auxiliary type: '{auxiliary_scan.kind}' does not match " - + f"scan type in metadata: '{start_doc['scan_type']}' for auxiliary" - + f" scan '{tiled_id}'. Skipping." - ) - continue - auxiliary_scans.append(auxiliary_scan) + for tiled_id in tiled_ids: + if auxiliary_scan := construct_tiled_auxiliary( + result, tiled_id, instrument_session + ): + auxiliary_scans.append(auxiliary_scan) LOGGER.debug( f"Found {len(auxiliary_scans)} auxiliary scans in tiled since " @@ -114,3 +71,57 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: LOGGER.info( f"Found no suitable auxiliary scans in tiled matching: {required_scan}." ) + + +def construct_tiled_auxiliary( + container: Container, tiled_id: str, instrument_session: str +) -> TiledAuxiliary | None: + start_doc = container[tiled_id].metadata["start"] + filename = f"{start_doc['scan_file']}.nxs" + instrument_session_directory = Path(start_doc["data_session_directory"]) + filepath = instrument_session_directory / filename + + sample = start_doc.get("sample_info") + + if sample is None: + pin = None + else: + capillary = sample["data"].get("capillary") + if not capillary: + LOGGER.warning(f"No capillary found for tiled scan '{tiled_id}'. Skipping.") + return + pin = StandardsPin( + capillary=sample["data"]["capillary"], + contents=sample["data"].get("composition"), + ) + time_per_pdf = start_doc["experiment_definition"]["data"]["time_per_pdf"] + list_of_temperatures = start_doc["experiment_definition"]["data"].get( + "list_of_temperatures" + ) + + requires = [ + construct_tiled_auxiliary( + container, auxiliary_scan["tiled_id"], instrument_session + ) + for auxiliary_scan in start_doc.get("auxiliary_scans", {}).values() + ] + + auxiliary_scan = TiledAuxiliary( + tiled_id=tiled_id, + instrument_session=instrument_session, + filename=filename, + instrument_session_directory=instrument_session_directory, + filepath=filepath, + pin=pin, + time_per_pdf=time_per_pdf, + list_of_temperatures=list_of_temperatures, + requires=[scan for scan in requires if scan is not None], + ) + if auxiliary_scan.kind != start_doc["scan_type"]: + LOGGER.warning( + f"Inferred auxiliary type: '{auxiliary_scan.kind}' does not match " + + f"scan type in metadata: '{start_doc['scan_type']}' for auxiliary" + + f" scan '{tiled_id}'. Skipping." + ) + return + return auxiliary_scan diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index c8be1d44..8d90ec21 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -251,7 +251,6 @@ def empty_capillary_task( "pin": None, "time_per_pdf": time_per_pdf, "list_of_temperatures": None, - "requires": [], "kind": AuxiliaryScanType.AIR, }, ], @@ -300,7 +299,6 @@ def air_auxiliary_scan(instrument_session: str, time_per_pdf: float) -> dict[str "pin": None, "time_per_pdf": time_per_pdf, "list_of_temperatures": None, - "requires": [], "kind": AuxiliaryScanType.AIR, } @@ -319,7 +317,6 @@ def empty_capillary_auxiliary_scan( }, "time_per_pdf": time_per_pdf, "list_of_temperatures": list_of_temperatures, - "requires": [air_auxiliary_scan(instrument_session, time_per_pdf)], "kind": AuxiliaryScanType.EMPTY_CAPILLARY, } diff --git a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py index ccde6cd5..95a62640 100644 --- a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py +++ b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py @@ -35,7 +35,7 @@ def mock_tiled_searches( result_1.metadata = { "start": { "time": 1, - "experiment_definition": {"data": {"time_per_pdf": 10}}, + "experiment_definition": {"data": {"time_per_pdf": 25}}, "sample_info": None, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10000", @@ -58,9 +58,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -81,9 +81,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -104,9 +104,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -134,9 +134,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -214,8 +214,8 @@ def test_get_suitable_tiled_background_makes_expected_searches( list_of_temperatures=None, requires=[], tiled_id="tiled_id_1", - filename="i15-1-10000", - filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + filename="i15-1-10000.nxs", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000.nxs"), instrument_session_directory=Path( "/path/to/data/2026/cm12345-1" ), @@ -247,8 +247,8 @@ def test_get_suitable_tiled_background_makes_expected_searches( list_of_temperatures=None, requires=[], tiled_id="tiled_id_1", - filename="i15-1-10000", - filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + filename="i15-1-10000.nxs", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000.nxs"), instrument_session_directory=Path( "/path/to/data/2026/cm12345-1" ), From 325762e5d7eb2a3b04552b2066f304381ed7f02e Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Wed, 11 Nov 2026 15:31:56 +0000 Subject: [PATCH 21/23] Don't add list to metadata --- .../plugins/i15_1/auxiliary.py | 2 +- .../plugins/i15_1/tiled_interaction.py | 123 ++++++++++-------- .../plugins/i15_1/test_i15_1_converter.py | 3 - .../plugins/i15_1/test_tiled_interaction.py | 26 ++-- 4 files changed, 81 insertions(+), 73 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 076317ca..24234850 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -64,7 +64,7 @@ class AuxiliaryScan(BaseModel): pin: StandardsPin | None time_per_pdf: float list_of_temperatures: list[int] | None = None - requires: list[Self] = Field(default_factory=lambda: []) + requires: list[Self] = Field(default_factory=lambda: [], exclude=True) @computed_field @property diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index c0c3a82d..7ab54478 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -39,65 +39,22 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: .search(KeyPresent("start.experiment_definition.data.time_per_pdf")) ) - items = sorted( - ((key, value) for key, value in result.items()), - key=lambda item: item[1].metadata["start"]["time"], - reverse=True, - ) + tiled_ids = [ + item[0] + for item in sorted( + result.items(), + key=lambda item: item[1].metadata["start"]["time"], + reverse=True, + ) + ] auxiliary_scans: list[TiledAuxiliary] = [] - for item in items: - tiled_id = item[0] - start_doc = item[1].metadata["start"] - filename = f"{start_doc['scan_file']}.nxs" - instrument_session_directory = Path(start_doc["data_session_directory"]) - filepath = instrument_session_directory / filename - - sample = start_doc.get("sample_info") - - if sample is None: - pin = None - else: - capillary = sample["data"].get("capillary") - if not capillary: - LOGGER.warning( - f"No capillary found for tiled scan '{tiled_id}'. Skipping." - ) - continue - pin = StandardsPin( - capillary=sample["data"]["capillary"], - contents=sample["data"].get("composition"), - ) - time_per_pdf = start_doc["experiment_definition"]["data"]["time_per_pdf"] - list_of_temperatures = start_doc["experiment_definition"]["data"].get( - "list_of_temperatures" - ) - - requires = [ - TiledAuxiliary.model_validate(auxiliary_scan) - for auxiliary_scan in start_doc.get("auxiliary_scans", {}).values() - ] - - auxiliary_scan = TiledAuxiliary( - tiled_id=tiled_id, - instrument_session=instrument_session, - filename=filename, - instrument_session_directory=instrument_session_directory, - filepath=filepath, - pin=pin, - time_per_pdf=time_per_pdf, - list_of_temperatures=list_of_temperatures, - requires=requires, - ) - if auxiliary_scan.kind != start_doc["scan_type"]: - LOGGER.warning( - f"Inferred auxiliary type: '{auxiliary_scan.kind}' does not match " - + f"scan type in metadata: '{start_doc['scan_type']}' for auxiliary" - + f" scan '{tiled_id}'. Skipping." - ) - continue - auxiliary_scans.append(auxiliary_scan) + for tiled_id in tiled_ids: + if auxiliary_scan := construct_tiled_auxiliary( + result, tiled_id, instrument_session + ): + auxiliary_scans.append(auxiliary_scan) LOGGER.debug( f"Found {len(auxiliary_scans)} auxiliary scans in tiled since " @@ -113,3 +70,57 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: LOGGER.info( f"Found no suitable auxiliary scans in tiled matching: {required_scan}." ) + + +def construct_tiled_auxiliary( + container: Container, tiled_id: str, instrument_session: str +) -> TiledAuxiliary | None: + start_doc = container[tiled_id].metadata["start"] + filename = f"{start_doc['scan_file']}.nxs" + instrument_session_directory = Path(start_doc["data_session_directory"]) + filepath = instrument_session_directory / filename + + sample = start_doc.get("sample_info") + + if sample is None: + pin = None + else: + capillary = sample["data"].get("capillary") + if not capillary: + LOGGER.warning(f"No capillary found for tiled scan '{tiled_id}'. Skipping.") + return + pin = StandardsPin( + capillary=sample["data"]["capillary"], + contents=sample["data"].get("composition"), + ) + time_per_pdf = start_doc["experiment_definition"]["data"]["time_per_pdf"] + list_of_temperatures = start_doc["experiment_definition"]["data"].get( + "list_of_temperatures" + ) + + requires = [ + construct_tiled_auxiliary( + container, auxiliary_scan["tiled_id"], instrument_session + ) + for auxiliary_scan in start_doc.get("auxiliary_scans", {}).values() + ] + + auxiliary_scan = TiledAuxiliary( + tiled_id=tiled_id, + instrument_session=instrument_session, + filename=filename, + instrument_session_directory=instrument_session_directory, + filepath=filepath, + pin=pin, + time_per_pdf=time_per_pdf, + list_of_temperatures=list_of_temperatures, + requires=[scan for scan in requires if scan is not None], + ) + if auxiliary_scan.kind != start_doc["scan_type"]: + LOGGER.warning( + f"Inferred auxiliary type: '{auxiliary_scan.kind}' does not match " + + f"scan type in metadata: '{start_doc['scan_type']}' for auxiliary" + + f" scan '{tiled_id}'. Skipping." + ) + return + return auxiliary_scan diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index c8be1d44..8d90ec21 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -251,7 +251,6 @@ def empty_capillary_task( "pin": None, "time_per_pdf": time_per_pdf, "list_of_temperatures": None, - "requires": [], "kind": AuxiliaryScanType.AIR, }, ], @@ -300,7 +299,6 @@ def air_auxiliary_scan(instrument_session: str, time_per_pdf: float) -> dict[str "pin": None, "time_per_pdf": time_per_pdf, "list_of_temperatures": None, - "requires": [], "kind": AuxiliaryScanType.AIR, } @@ -319,7 +317,6 @@ def empty_capillary_auxiliary_scan( }, "time_per_pdf": time_per_pdf, "list_of_temperatures": list_of_temperatures, - "requires": [air_auxiliary_scan(instrument_session, time_per_pdf)], "kind": AuxiliaryScanType.EMPTY_CAPILLARY, } diff --git a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py index 53a332f0..ddb59ee5 100644 --- a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py +++ b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py @@ -35,7 +35,7 @@ def mock_tiled_searches( result_1.metadata = { "start": { "time": 1, - "experiment_definition": {"data": {"time_per_pdf": 10}}, + "experiment_definition": {"data": {"time_per_pdf": 25}}, "sample_info": None, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10000", @@ -58,9 +58,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -81,9 +81,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -104,9 +104,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -134,9 +134,9 @@ def mock_tiled_searches( "time_per_pdf": 25.0, "list_of_temperatures": None, "tiled_id": "tiled_id_1", - "filename": "i15-1-10000", + "filename": "i15-1-10000.nxs", "instrument_session_directory": "/path/to/data/2026/cm12345-1", - "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000", + "filepath": "/path/to/data/2026/cm12345-1/i15-1-10000.nxs", } }, } @@ -227,8 +227,8 @@ def test_get_suitable_tiled_background_makes_expected_searches( list_of_temperatures=None, requires=[], tiled_id="tiled_id_1", - filename="i15-1-10000", - filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + filename="i15-1-10000.nxs", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000.nxs"), instrument_session_directory=Path( "/path/to/data/2026/cm12345-1" ), @@ -260,8 +260,8 @@ def test_get_suitable_tiled_background_makes_expected_searches( list_of_temperatures=None, requires=[], tiled_id="tiled_id_1", - filename="i15-1-10000", - filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000"), + filename="i15-1-10000.nxs", + filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10000.nxs"), instrument_session_directory=Path( "/path/to/data/2026/cm12345-1" ), From 265f90c227612172a10dcbc9ccd96b04e61fa2db Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Thu, 12 Nov 2026 12:26:20 +0000 Subject: [PATCH 22/23] Use q_max parameter from schema --- .../plugins/i15_1/auxiliary.py | 8 ++ .../plugins/i15_1/i15_1_converter.py | 9 +- .../plugins/i15_1/plans.py | 1 + .../plugins/i15_1/tiled_interaction.py | 3 + .../plugins/i15_1/test_auxiliary.py | 43 +++++++ .../plugins/i15_1/test_i15_1_converter.py | 118 ++++++++++++------ .../plugins/i15_1/test_tiled_interaction.py | 49 +++++--- 7 files changed, 178 insertions(+), 53 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/auxiliary.py b/src/daq_queuing_service/plugins/i15_1/auxiliary.py index 061336fd..a8ef3df8 100644 --- a/src/daq_queuing_service/plugins/i15_1/auxiliary.py +++ b/src/daq_queuing_service/plugins/i15_1/auxiliary.py @@ -1,5 +1,6 @@ from enum import StrEnum from pathlib import Path +from typing import Literal from daq_config_server.models.i15_1.standards_puck import StandardsPin from pydantic import BaseModel, ConfigDict, computed_field @@ -32,6 +33,9 @@ def get_background_temperatures( ) +Q_MAX_OPTIONS = Literal[25, 30, 35, 40] + + class AuxiliaryScan(BaseModel): """Auxiliary scans are scans added automatically by the queue, such as background scans and standard sample calibration scans. They are needed for analysis of user @@ -42,6 +46,7 @@ class AuxiliaryScan(BaseModel): instrument_session: str pin: StandardsPin | None time_per_pdf: float + q_max: Q_MAX_OPTIONS list_of_temperatures: list[int] | None = None @computed_field @@ -79,6 +84,7 @@ def is_suitable( self.instrument_session == required_background.instrument_session and self.pin == required_background.pin and self.time_per_pdf >= required_background.time_per_pdf + and self.q_max >= required_background.q_max ) def _temperatures_match( @@ -142,6 +148,7 @@ def attempt_to_combine_with( pin=self.pin, time_per_pdf=max(self.time_per_pdf, required_background.time_per_pdf), list_of_temperatures=list_of_temperatures, + q_max=max(self.q_max, required_background.q_max), ) assert result.is_suitable(required_background) return result @@ -164,6 +171,7 @@ def from_experiment(cls, experiment: Experiment) -> "AuxiliaryScan": instrument_session=experiment.instrument_session, pin=pin, time_per_pdf=experiment.experiment_definition.data["time_per_pdf"], + q_max=experiment.experiment_definition.data["q_max"], list_of_temperatures=experiment.experiment_definition.data.get( "list_of_temperatures" ), diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 5819c899..f5585dfc 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -295,6 +295,7 @@ def _get_required_auxiliary_scans( self, experiment: Experiment ) -> list[AuxiliaryScan]: time_per_pdf = experiment.experiment_definition.data["time_per_pdf"] + q_max = experiment.experiment_definition.data["q_max"] list_of_temperatures = experiment.experiment_definition.data.get( "list_of_temperatures" ) @@ -307,6 +308,7 @@ def _get_required_auxiliary_scans( instrument_session=experiment.instrument_session, pin=None, time_per_pdf=time_per_pdf, + q_max=q_max, ), AuxiliaryScan( instrument_session=experiment.instrument_session, @@ -314,6 +316,7 @@ def _get_required_auxiliary_scans( capillary=experiment.sample.data["capillary"], contents=None ), time_per_pdf=time_per_pdf, + q_max=q_max, list_of_temperatures=list_of_temperatures, ), AuxiliaryScan( @@ -322,6 +325,7 @@ def _get_required_auxiliary_scans( capillary=experiment.sample.data["capillary"], contents="Silicon" ), time_per_pdf=time_per_pdf, + q_max=q_max, ), ] @@ -329,7 +333,10 @@ def _construct_auxiliary_experiment( self, auxiliary_scan: AuxiliaryScan, instrument_session: str ) -> Experiment: LOGGER.debug(f"Constructing experiment for auxiliary scan: {auxiliary_scan}") - data: dict[str, Any] = {"time_per_pdf": auxiliary_scan.time_per_pdf} + data: dict[str, Any] = { + "time_per_pdf": auxiliary_scan.time_per_pdf, + "q_max": auxiliary_scan.q_max, + } if auxiliary_scan.list_of_temperatures: settle_time = ( self._queue_params.blower_auxiliary_collection_params.settle_time_s diff --git a/src/daq_queuing_service/plugins/i15_1/plans.py b/src/daq_queuing_service/plugins/i15_1/plans.py index 3942268a..c2ce2440 100644 --- a/src/daq_queuing_service/plugins/i15_1/plans.py +++ b/src/daq_queuing_service/plugins/i15_1/plans.py @@ -105,6 +105,7 @@ def get_data_collection( "exposure_time_per_frame": data_collection_params.exposure_time_per_frame_s, "scan_type": scan_type, "metadata": collection_metadata, + "q_max": experiment_definition.data["q_max"], } if experiment_is_blower(experiment): diff --git a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py index 9e00504a..9966b111 100644 --- a/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py +++ b/src/daq_queuing_service/plugins/i15_1/tiled_interaction.py @@ -37,6 +37,7 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: .search(Comparison("ge", "stop.time", oldest_valid_time)) .search(In("start.scan_type", list(AuxiliaryScanType))) .search(KeyPresent("start.experiment_definition.data.time_per_pdf")) + .search(KeyPresent("start.experiment_definition.data.q_max")) ) items = sorted( @@ -70,6 +71,7 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: contents=sample["data"].get("composition"), ) time_per_pdf = start_doc["experiment_definition"]["data"]["time_per_pdf"] + q_max = start_doc["experiment_definition"]["data"]["q_max"] list_of_temperatures = start_doc["experiment_definition"]["data"].get( "list_of_temperatures" ) @@ -82,6 +84,7 @@ def _query_tiled(instrument_session: str) -> list[TiledAuxiliary]: filepath=filepath, pin=pin, time_per_pdf=time_per_pdf, + q_max=q_max, list_of_temperatures=list_of_temperatures, ) if auxiliary_scan.kind != start_doc["scan_type"]: diff --git a/tests/unit_tests/plugins/i15_1/test_auxiliary.py b/tests/unit_tests/plugins/i15_1/test_auxiliary.py index e4784002..1e235ce6 100644 --- a/tests/unit_tests/plugins/i15_1/test_auxiliary.py +++ b/tests/unit_tests/plugins/i15_1/test_auxiliary.py @@ -12,11 +12,13 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, list_of_temperatures=[], ), True, @@ -26,11 +28,29 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, + ), + AuxiliaryScan( + instrument_session="abc", + pin=StandardsPin(capillary="bs1.0", contents="Silicon"), + time_per_pdf=50, + q_max=35, + list_of_temperatures=[], + ), + False, + ), + ( + AuxiliaryScan( + instrument_session="abc", + pin=StandardsPin(capillary="bs1.0", contents="Silicon"), + time_per_pdf=50, + q_max=30, ), AuxiliaryScan( instrument_session="def", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), False, ), @@ -39,11 +59,13 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.5", contents="Silicon"), time_per_pdf=50, + q_max=30, ), False, ), @@ -52,12 +74,14 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, list_of_temperatures=[100, 200, 300], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), False, ), @@ -66,12 +90,14 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, list_of_temperatures=[100, 200, 300], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, list_of_temperatures=[100, 200, 300, 400], ), False, @@ -81,12 +107,14 @@ instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=40, list_of_temperatures=[90, 290, 490], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=25, list_of_temperatures=[95, 250, 300, 450], ), True, @@ -107,18 +135,21 @@ def test_is_suitable_works_as_expected( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=10, + q_max=30, list_of_temperatures=[150, 250, 350], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=25, list_of_temperatures=[100, 200, 300], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, # Max time_per_pdf + q_max=30, # Max q_max list_of_temperatures=[100, 200, 300, 400], # Covers whole temp range ), ), @@ -127,16 +158,19 @@ def test_is_suitable_works_as_expected( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=100, + q_max=40, ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=100, + q_max=40, ), ), ( @@ -144,18 +178,21 @@ def test_is_suitable_works_as_expected( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=40, + q_max=30, list_of_temperatures=[50, 610], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=100, + q_max=30, list_of_temperatures=[100, 200, 300], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=100, + q_max=30, list_of_temperatures=[50, 150, 250, 350, 450, 550, 650], ), ), @@ -177,12 +214,14 @@ def test_attempt_to_combine_with_works_as_expected( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=10, + q_max=30, list_of_temperatures=[150, 250, 350], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Ga/In"), time_per_pdf=50, + q_max=30, list_of_temperatures=[100, 200, 300], ), ), @@ -191,12 +230,14 @@ def test_attempt_to_combine_with_works_as_expected( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=10, + q_max=30, list_of_temperatures=[150, 250, 350], ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, list_of_temperatures=[], ), ), @@ -205,11 +246,13 @@ def test_attempt_to_combine_with_works_as_expected( instrument_session="def", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=10, + q_max=30, ), AuxiliaryScan( instrument_session="abc", pin=StandardsPin(capillary="bs1.0", contents="Silicon"), time_per_pdf=50, + q_max=30, ), ), ], diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index 934eb708..0081b830 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -17,6 +17,7 @@ from daq_queuing_service.broadcaster import Broadcaster, serialise from daq_queuing_service.plugins.i15_1.auxiliary import ( + Q_MAX_OPTIONS, AuxiliaryScan, AuxiliaryScanType, TiledAuxiliary, @@ -63,6 +64,7 @@ def i15_1_tasks(): "list_of_temperatures": [0, 20], "settle_time": 5, "ramp_rate": 10, + "q_max": 30, }, ), ), @@ -91,6 +93,7 @@ def i15_1_tasks(): "list_of_temperatures": [100, 120], "settle_time": 5, "ramp_rate": 10, + "q_max": 25, }, ), ), @@ -119,6 +122,7 @@ def i15_1_tasks(): "list_of_temperatures": [200, 220], "settle_time": 5, "ramp_rate": 10, + "q_max": 35, }, ), ), @@ -140,7 +144,12 @@ def i15_1_tasks(): positionInContainer=ContainerPosition(position=2), ), experiment_definition=ExperimentDefinition( - name="", id="", data={"time_per_pdf": 20} + name="", + id="", + data={ + "time_per_pdf": 20, + "q_max": 40, + }, ), ), id="5e2571d9-2f87-45b2-ac3b-b486e83a92d6", @@ -168,6 +177,7 @@ def i15_1_tasks(): "list_of_temperatures": [400, 420], "settle_time": 5, "ramp_rate": 10, + "q_max": 25, }, ), ), @@ -180,11 +190,14 @@ def i15_1_tasks(): return tasks -def make_background_task(capillary: STANDARD_CAPILLARY, time_per_pdf: int) -> Task: +def make_background_task( + capillary: STANDARD_CAPILLARY, time_per_pdf: int, q_max: Q_MAX_OPTIONS +) -> Task: background = AuxiliaryScan( instrument_session="cm12345-1", pin=StandardsPin(capillary=capillary, contents=None), time_per_pdf=time_per_pdf, + q_max=q_max, ) return Task( experiment=I151Converter()._construct_auxiliary_experiment( @@ -215,7 +228,10 @@ def create_task_dict(task_id: str, experiment: dict[str, Any]) -> dict[str, Any] def air_task( - task_id: str, instrument_session: str, time_per_pdf: float + task_id: str, + instrument_session: str, + time_per_pdf: float, + q_max: Q_MAX_OPTIONS, ) -> dict[str, Any]: return create_task_dict( task_id, @@ -226,7 +242,7 @@ def air_task( "experiment_definition": { "name": "Air", "id": "", - "data": {"time_per_pdf": time_per_pdf}, + "data": {"time_per_pdf": time_per_pdf, "q_max": q_max}, }, }, ) @@ -236,11 +252,12 @@ def empty_capillary_task( task_id: str, instrument_session: str, time_per_pdf: float, + q_max: Q_MAX_OPTIONS, list_of_temperatures: list[float] | None, capillary: STANDARD_CAPILLARY, standards_puck: StandardsPuck, ) -> dict[str, Any]: - data: dict[str, Any] = {"time_per_pdf": time_per_pdf} + data: dict[str, Any] = {"time_per_pdf": time_per_pdf, "q_max": q_max} if list_of_temperatures is not None: data.update( { @@ -283,6 +300,7 @@ def standard_sample_task( task_id: str, instrument_session: str, time_per_pdf: float, + q_max: Q_MAX_OPTIONS, capillary: STANDARD_CAPILLARY, contents: STANDARD_SAMPLE, standards_puck: StandardsPuck, @@ -311,7 +329,7 @@ def standard_sample_task( "experiment_definition": { "name": "Standard Sample", "id": "", - "data": {"time_per_pdf": time_per_pdf}, + "data": {"time_per_pdf": time_per_pdf, "q_max": q_max}, }, }, ) @@ -341,6 +359,7 @@ def background_found_in_tiled(): filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=25, ) ), ) as mock_get_suitable_tiled_background: @@ -367,7 +386,7 @@ def test_given_sample_name_in_correct_format_then_correct_sample_loaded(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name=" ", id="", data={"time_per_pdf": 100} + name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -384,7 +403,7 @@ def test_centre_sample_at_room_temperature_uses_correct_params_from_queue_params experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name=" ", id="", data={"time_per_pdf": 100} + name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -399,7 +418,7 @@ def test_centre_sample_at_room_temperature_uses_correct_params_from_queue_params "exposure_time": centring_params.exposure_time_per_frame_s, "metadata": { "experiment_definition": ExperimentDefinition( - name=" ", id="", data={"time_per_pdf": 100} + name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), "sample": make_sample("test_8_1", ""), }, @@ -419,6 +438,7 @@ def test_centre_sample_with_blower_uses_correct_params_from_queue_params( "time_per_pdf": 100, "settle_time": 5, "ramp_rate": 10, + "q_max": 30, }, ), sample=make_sample("test_8_1", ""), @@ -440,6 +460,7 @@ def test_centre_sample_with_blower_uses_correct_params_from_queue_params( "time_per_pdf": 100, "settle_time": 5, "ramp_rate": 10, + "q_max": 30, }, ), "sample": make_sample("test_8_1", ""), @@ -451,7 +472,7 @@ def test_session_and_number_of_tasks_per_experiment_is_expected(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name=" ", id="", data={"time_per_pdf": 100} + name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -466,7 +487,7 @@ def test_experiment_with_correct_experiment_type_are_converted(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name="run_full_collection", id="", data={"time_per_pdf": 100} + name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -490,7 +511,7 @@ def test_experiment_with_no_temperatures_runs_a_room_temperature_collection(): experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name="", id="", data={"time_per_pdf": 100} + name="", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -502,7 +523,7 @@ def test_experiment_with_no_temperatures_runs_a_room_temperature_collection(): assert tasks[4].params["scan_type"] == ScanType.DATA_COLLECTION assert tasks[4].params["metadata"] == { "experiment_definition": ExperimentDefinition( - name="", id="", data={"time_per_pdf": 100} + name="", id="", data={"time_per_pdf": 100, "q_max": 30} ), "sample": make_sample("test_8_1", ""), } @@ -517,6 +538,7 @@ def test_experiment_with_temperatures_runs_a_blower_collection(): "time_per_pdf": 100, "settle_time": 5, "ramp_rate": 10, + "q_max": 30, }, ) @@ -544,7 +566,7 @@ def test_experiment_with_no_sample_converts_to_air_scan(): experiment_definition = ExperimentDefinition( name="", id="", - data={"time_per_pdf": 100}, + data={"time_per_pdf": 100, "q_max": 30}, ) experiment = Experiment( @@ -560,11 +582,12 @@ def test_experiment_with_no_sample_converts_to_air_scan(): assert tasks[1].params == { "full_collection_time": 100, "exposure_time_per_frame": 1.0, + "q_max": 30, "scan_type": ScanType.DATA_COLLECTION, "metadata": { "sample": None, "experiment_definition": ExperimentDefinition( - name="", id="", data={"time_per_pdf": 100} + name="", id="", data={"time_per_pdf": 100, "q_max": 30} ), }, } @@ -579,6 +602,7 @@ def test_wait_for_beam_plans_added_by_converter(): "time_per_pdf": 100, "settle_time": 5, "ramp_rate": 10, + "q_max": 30, }, ) @@ -604,12 +628,13 @@ def test_tiled_backgrounds_added_to_metadata_if_present(): filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=30, ) } experiment_definition = ExperimentDefinition( name="", id="", - data={"time_per_pdf": 100}, + data={"time_per_pdf": 100, "q_max": 30}, ) experiment = Experiment( @@ -631,6 +656,7 @@ def test_tiled_backgrounds_added_to_metadata_if_present(): filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=30, ), }, } @@ -640,7 +666,7 @@ def test_mix_of_experiments_with_correct_experiment_type_are_converted(): good_experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name="run_full_collection", id="", data={"time_per_pdf": 100} + name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 30} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -677,7 +703,7 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( experiment = Experiment( name="test_experiment", experiment_definition=ExperimentDefinition( - name="run_full_collection", id="", data={"time_per_pdf": 100} + name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 40} ), sample=make_sample("test_8_1", ""), instrument_session="cm12345-1", @@ -688,12 +714,12 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( ) tasks = converter.pre_process(None, [task], [], []) assert len(tasks) == 4 - assert tasks[0].model_dump() == air_task(tasks[0].id, "cm12345-1", 100.0) + assert tasks[0].model_dump() == air_task(tasks[0].id, "cm12345-1", 100.0, 40) assert tasks[1].model_dump() == empty_capillary_task( - tasks[1].id, "cm12345-1", 100.0, None, "fq1.0", standards_puck + tasks[1].id, "cm12345-1", 100.0, 40, None, "fq1.0", standards_puck ) assert tasks[2].model_dump() == standard_sample_task( - tasks[2].id, "cm12345-1", 100.0, "fq1.0", "Silicon", standards_puck + tasks[2].id, "cm12345-1", 100.0, 40, "fq1.0", "Silicon", standards_puck ) assert converter._tiled_auxiliary_scans == {"1": {}} @@ -703,16 +729,23 @@ def test_add_required_background_scans_does_not_add_the_same_background_twice( i15_1_tasks: list[Task], background_not_found_in_tiled: MagicMock, ): - bg_1 = AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=5) + bg_1 = AuxiliaryScan( + instrument_session="cm12345-1", + pin=None, + time_per_pdf=5, + q_max=30, + ) bg_2 = AuxiliaryScan( instrument_session="cm12345-1", pin=StandardsPin(capillary="bs1.0", contents=None), time_per_pdf=10, + q_max=25, ) bg_3 = AuxiliaryScan( instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=15, + q_max=35, ) def fake_get_required_auxiliary_scans(self: I151Converter, experiment: Experiment): @@ -811,38 +844,39 @@ def test_same_experiment_in_different_instrument_sessions_will_add_backgrounds_i assert len(new_tasks) == 15 - assert new_tasks[0].model_dump() == air_task(new_tasks[0].id, "cm12345-1", 25.0) + assert new_tasks[0].model_dump() == air_task(new_tasks[0].id, "cm12345-1", 25.0, 40) assert new_tasks[1].model_dump() == empty_capillary_task( new_tasks[1].id, "cm12345-1", 25.0, + 30, [0, 100, 200, 300, 400, 500], "fq1.0", standards_puck, ) assert new_tasks[2].model_dump() == standard_sample_task( - new_tasks[2].id, "cm12345-1", 25.0, "fq1.0", "Silicon", standards_puck + new_tasks[2].id, "cm12345-1", 25.0, 40, "fq1.0", "Silicon", standards_puck ) - assert new_tasks[4].model_dump() == air_task(new_tasks[4].id, "different", 10.0) + assert new_tasks[4].model_dump() == air_task(new_tasks[4].id, "different", 10.0, 25) assert new_tasks[5].model_dump() == empty_capillary_task( - new_tasks[5].id, "different", 10.0, [100, 200], "fq1.0", standards_puck + new_tasks[5].id, "different", 10.0, 25, [100, 200], "fq1.0", standards_puck ) assert new_tasks[6].model_dump() == standard_sample_task( - new_tasks[6].id, "different", 10.0, "fq1.0", "Silicon", standards_puck + new_tasks[6].id, "different", 10.0, 25, "fq1.0", "Silicon", standards_puck ) assert new_tasks[8].model_dump() == air_task( - new_tasks[8].id, "also_different", 10.0 + new_tasks[8].id, "also_different", 10.0, 35 ) assert new_tasks[9].model_dump() == empty_capillary_task( - new_tasks[9].id, "also_different", 10.0, [200, 300], "fq1.0", standards_puck + new_tasks[9].id, "also_different", 10.0, 35, [200, 300], "fq1.0", standards_puck ) assert new_tasks[10].model_dump() == standard_sample_task( - new_tasks[10].id, "also_different", 10.0, "fq1.0", "Silicon", standards_puck + new_tasks[10].id, "also_different", 10.0, 35, "fq1.0", "Silicon", standards_puck ) assert new_tasks[12].model_dump() == empty_capillary_task( - new_tasks[12].id, "cm12345-1", 20.0, None, "fq1.0", standards_puck + new_tasks[12].id, "cm12345-1", 20.0, 40, None, "fq1.0", standards_puck ) @@ -868,6 +902,7 @@ def test_add_required_background_scans_if_found_in_tiled_then_no_background_adde filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=25, ) } for task in i15_1_tasks @@ -891,8 +926,9 @@ def test__ensure_background_in_queue_or_tiled_returns_if_suitable_already_queued instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=25, + q_max=30, ) - new_tasks = [make_background_task("fq1.0", 25)] + new_tasks = [make_background_task("fq1.0", 25, 30)] result = i15_1_converter._ensure_auxiliary_in_queue_or_tiled( background, None, new_tasks, "task_id", "cm12345-1" ) @@ -906,11 +942,12 @@ def test__ensure_background_in_queue_or_tiled_returns_if_current_task_is_suitabl instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=25, + q_max=40, ) new_tasks: list[Task] = [] result = i15_1_converter._ensure_auxiliary_in_queue_or_tiled( background, - TaskWithPosition.from_task(make_background_task("fq1.0", 25)), + TaskWithPosition.from_task(make_background_task("fq1.0", 25, q_max=40)), new_tasks, "task_id", "cm12345-1", @@ -925,17 +962,18 @@ def test__ensure_background_in_queue_or_tiled_modifies_queued_background_if_poss instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=25, + q_max=40, ) - current_task = TaskWithPosition.from_task(make_background_task("fq1.0", 25)) + current_task = TaskWithPosition.from_task(make_background_task("fq1.0", 25, 40)) # Current task is suitable but not a background assert isinstance(current_task.experiment, Experiment) current_task.experiment.experiment_definition.name = "Not a background" - new_tasks = [make_background_task("fq1.0", 10)] + new_tasks = [make_background_task("fq1.0", 10, 30)] result = i15_1_converter._ensure_auxiliary_in_queue_or_tiled( background, current_task, new_tasks, "task_id", "cm12345-1" ) assert len(result) == 1 - assert_tasks_equal(result[0], make_background_task("fq1.0", 25)) + assert_tasks_equal(result[0], make_background_task("fq1.0", 25, 40)) def test__ensure_background_in_queue_or_tiled_adds_background_if_none_suitable_in_queue( @@ -946,12 +984,13 @@ def test__ensure_background_in_queue_or_tiled_adds_background_if_none_suitable_i instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=25, + q_max=35, ) result = i15_1_converter._ensure_auxiliary_in_queue_or_tiled( background, None, [], "task_id", "cm12345-1" ) assert len(result) == 1 - assert_tasks_equal(result[0], make_background_task("fq1.0", 25)) + assert_tasks_equal(result[0], make_background_task("fq1.0", 25, 35)) def test__ensure_background_in_queue_or_tiled_saves_tiled_info_if_exists( @@ -963,6 +1002,7 @@ def test__ensure_background_in_queue_or_tiled_saves_tiled_info_if_exists( instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=25, + q_max=35, ) result = i15_1_converter._ensure_auxiliary_in_queue_or_tiled( background, None, [], "task_id", "cm12345-1" @@ -978,6 +1018,7 @@ def test__ensure_background_in_queue_or_tiled_saves_tiled_info_if_exists( filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=25, ) } } @@ -1019,12 +1060,13 @@ def test_i15_1_tasks_can_be_serialised(): filepath=Path(""), instrument_session_directory=Path(""), filename="", + q_max=35, ) } experiment_definition = ExperimentDefinition( name="", id="", - data={"time_per_pdf": 100}, + data={"time_per_pdf": 100, "q_max": 25}, ) experiment = Experiment( diff --git a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py index 1cd01b66..2ce2496d 100644 --- a/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py +++ b/tests/unit_tests/plugins/i15_1/test_tiled_interaction.py @@ -28,13 +28,13 @@ def mock_current_time(): @pytest.fixture() def mock_tiled_searches( tiled_client: MagicMock, -) -> tuple[MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock]: +) -> tuple[MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock]: result_1 = MagicMock() result_1.metadata = { "start": { "time": 1, - "experiment_definition": {"data": {"time_per_pdf": 10}}, + "experiment_definition": {"data": {"time_per_pdf": 10, "q_max": 35}}, "sample_info": None, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10000", @@ -45,7 +45,7 @@ def mock_tiled_searches( result_2.metadata = { "start": { "time": 10, - "experiment_definition": {"data": {"time_per_pdf": 11}}, + "experiment_definition": {"data": {"time_per_pdf": 11, "q_max": 35}}, "sample_info": {"data": {"capillary": "fq1.0"}}, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10001", @@ -56,7 +56,7 @@ def mock_tiled_searches( result_3.metadata = { "start": { "time": 2, - "experiment_definition": {"data": {"time_per_pdf": 9}}, + "experiment_definition": {"data": {"time_per_pdf": 9, "q_max": 30}}, "sample_info": {"data": {"capillary": "fq1.0"}}, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10002", @@ -67,7 +67,7 @@ def mock_tiled_searches( result_4.metadata = { "start": { "time": 5, - "experiment_definition": {"data": {"time_per_pdf": 12}}, + "experiment_definition": {"data": {"time_per_pdf": 12, "q_max": 25}}, "sample_info": {"data": {"capillary": "fq1.0"}}, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10003", @@ -84,6 +84,7 @@ def mock_tiled_searches( "list_of_temperatures": [100, 200, 300], "ramp_rate": 0, "settle_time": 10, + "q_max": 35, } }, "sample_info": {"data": {"capillary": "fq1.0"}}, @@ -93,8 +94,8 @@ def mock_tiled_searches( } } - search_result_6 = MagicMock() - search_result_6.search = MagicMock( + search_result_7 = MagicMock() + search_result_7.search = MagicMock( return_value={ "tiled_id_1": result_1, "tiled_id_2": result_2, @@ -104,6 +105,8 @@ def mock_tiled_searches( } ) + search_result_6 = MagicMock() + search_result_6.search = MagicMock(return_value=search_result_7) search_result_5 = MagicMock() search_result_5.search = MagicMock(return_value=search_result_6) search_result_4 = MagicMock() @@ -122,19 +125,24 @@ def mock_tiled_searches( search_result_4, search_result_5, search_result_6, + search_result_7, ) def test_get_suitable_tiled_background_makes_expected_searches( mock_tiled_searches: tuple[ - MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock + MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock, MagicMock ], queue_params: QueueParameters, ): - client, search_2, search_3, search_4, search_5, search_6 = mock_tiled_searches + client, search_2, search_3, search_4, search_5, search_6, search_7 = ( + mock_tiled_searches + ) get_suitable_tiled_scan( client, - AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=10), + AuxiliaryScan( + instrument_session="cm12345-1", pin=None, time_per_pdf=10, q_max=35 + ), queue_params.tiled_stale_time_s, ) client.search.assert_called_once_with(Eq(key="start.instrument", value="i15-1")) @@ -151,6 +159,9 @@ def test_get_suitable_tiled_background_makes_expected_searches( search_6.search.assert_called_once_with( KeyPresent("start.experiment_definition.data.time_per_pdf") ) + search_7.search.assert_called_once_with( + KeyPresent("start.experiment_definition.data.q_max") + ) @pytest.mark.parametrize( @@ -161,6 +172,7 @@ def test_get_suitable_tiled_background_makes_expected_searches( instrument_session="cm12345-1", pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=10, + q_max=30, ), TiledAuxiliary( instrument_session="cm12345-1", @@ -170,6 +182,7 @@ def test_get_suitable_tiled_background_makes_expected_searches( filename="i15-1-10001.nxs", instrument_session_directory=Path("/path/to/data/2026/cm12345-1"), filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10001.nxs"), + q_max=35, ), ), ( @@ -178,6 +191,7 @@ def test_get_suitable_tiled_background_makes_expected_searches( pin=StandardsPin(capillary="fq1.0", contents=None), time_per_pdf=10, list_of_temperatures=[150, 250], + q_max=30, ), TiledAuxiliary( instrument_session="cm12345-1", @@ -188,6 +202,7 @@ def test_get_suitable_tiled_background_makes_expected_searches( instrument_session_directory=Path("/path/to/data/2026/cm12345-1"), filepath=Path("/path/to/data/2026/cm12345-1/i15-1-10004.nxs"), list_of_temperatures=[100, 200, 300], + q_max=35, ), ), ], @@ -210,7 +225,9 @@ def test_get_suitable_tiled_background_returns_none_if_no_matching_backgrounds_f assert ( get_suitable_tiled_scan( client, - AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=10), + AuxiliaryScan( + instrument_session="cm12345-1", pin=None, time_per_pdf=10, q_max=30 + ), 1000000, ) is None @@ -236,7 +253,9 @@ def test_get_suitable_tiled_background_skips_tiled_scan_if_no_capillary_found_an with caplog.at_level(logging.WARNING): tiled_scan = get_suitable_tiled_scan( client, - AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=10), + AuxiliaryScan( + instrument_session="cm12345-1", pin=None, time_per_pdf=10, q_max=30 + ), 1000000, ) assert tiled_scan is None @@ -251,7 +270,7 @@ def test_get_suitable_tiled_background_skips_tiled_scan_if_scan_type_doesnt_matc result.metadata = { "start": { "time": 10, - "experiment_definition": {"data": {"time_per_pdf": 11}}, + "experiment_definition": {"data": {"time_per_pdf": 11, "q_max": 25}}, "sample_info": {"data": {"capillary": "fq1.0"}}, "data_session_directory": "/path/to/data/2026/cm12345-1", "scan_file": "i15-1-10001", @@ -262,7 +281,9 @@ def test_get_suitable_tiled_background_skips_tiled_scan_if_scan_type_doesnt_matc with caplog.at_level(logging.WARNING): tiled_scan = get_suitable_tiled_scan( client, - AuxiliaryScan(instrument_session="cm12345-1", pin=None, time_per_pdf=10), + AuxiliaryScan( + instrument_session="cm12345-1", pin=None, time_per_pdf=10, q_max=30 + ), 1000000, ) assert tiled_scan is None From ae7a149dea8ddccf39db3404167c0bb788c39888 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Thu, 12 Nov 2026 17:16:52 +0000 Subject: [PATCH 23/23] Dont do centring for empty capillaries --- .../plugins/i15_1/i15_1_converter.py | 2 +- tests/unit_tests/conftest.py | 9 ++- .../plugins/i15_1/test_i15_1_converter.py | 64 ++++++++++--------- tests/unit_tests/test_api.py | 22 +++---- 4 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py index 982b608a..6c753138 100644 --- a/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py +++ b/src/daq_queuing_service/plugins/i15_1/i15_1_converter.py @@ -173,7 +173,7 @@ def _construct_blueapi_tasks_from_experiment( if self._queue_params.do_wait_for_beam: plans.append(get_wait_for_beam(session)) - if sample and self._queue_params.do_centring: + if sample and sample.data.get("composition") and self._queue_params.do_centring: plans.append(get_centre_sample(centring_params, experiment)) if self._queue_params.do_wait_for_beam: plans.append(get_wait_for_beam(session)) diff --git a/tests/unit_tests/conftest.py b/tests/unit_tests/conftest.py index bae0ca47..652422ae 100644 --- a/tests/unit_tests/conftest.py +++ b/tests/unit_tests/conftest.py @@ -59,11 +59,14 @@ def setup_logger_for_tests(): CONTAINER = Container(id="", positionInParent=CONTAINER_POSITION) -def make_sample(name: str, id: str): +def make_sample(name: str, id: str, composition: str = ""): + data = {"capillary": "fq1.0", "composition": "chemical"} + if composition: + data["composition"] = composition return Sample( name=name, id=id, - data={"capillary": "fq1.0"}, + data=data, positionInContainer=CONTAINER_POSITION, container=CONTAINER, ) @@ -79,7 +82,7 @@ def tasks() -> list[Task]: experiment_definition=ExperimentDefinition( name="test", id=str(i), data={} ), - sample=make_sample(f"test_8_{i}", str(i)), + sample=make_sample(f"test_8_{i}", str(i), composition="chemical"), ), id=str(i), ) diff --git a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py index a1fecc4c..3efb1b0f 100644 --- a/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py +++ b/tests/unit_tests/plugins/i15_1/test_i15_1_converter.py @@ -50,7 +50,7 @@ def i15_1_tasks(): sample=Sample( name="sample_0_2", id="0", - data={"capillary": "fq1.0"}, + data={"capillary": "fq1.0", "composition": "chemical"}, container=Container( id="", positionInParent=ContainerPosition(position=2) ), @@ -79,7 +79,7 @@ def i15_1_tasks(): sample=Sample( name="sample_1_2", id="1", - data={"capillary": "fq1.0"}, + data={"capillary": "fq1.0", "composition": "chemical"}, container=Container( id="", positionInParent=ContainerPosition(position=2) ), @@ -108,7 +108,7 @@ def i15_1_tasks(): sample=Sample( name="sample_2_2", id="2", - data={"capillary": "fq1.0"}, + data={"capillary": "fq1.0", "composition": "chemical"}, container=Container( id="", positionInParent=ContainerPosition(position=2) ), @@ -137,7 +137,7 @@ def i15_1_tasks(): sample=Sample( name="sample_3_2", id="3", - data={"capillary": "fq1.0"}, + data={"capillary": "fq1.0", "composition": "chemical"}, container=Container( id="", positionInParent=ContainerPosition(position=2) ), @@ -163,7 +163,7 @@ def i15_1_tasks(): sample=Sample( name="sample_4_2", id="4", - data={"capillary": "fq1.0"}, + data={"capillary": "fq1.0", "composition": "chemical"}, container=Container( id="", positionInParent=ContainerPosition(position=2) ), @@ -464,7 +464,7 @@ def test_centre_sample_at_room_temperature_uses_correct_params_from_queue_params experiment_definition=ExperimentDefinition( name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) centring_params = queue_params.room_temperature_centring_params @@ -479,7 +479,7 @@ def test_centre_sample_at_room_temperature_uses_correct_params_from_queue_params "experiment_definition": ExperimentDefinition( name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), - "sample": make_sample("test_8_1", ""), + "sample": make_sample("test_8_1", "", composition="chemical"), }, } @@ -500,7 +500,7 @@ def test_centre_sample_with_blower_uses_correct_params_from_queue_params( "q_max": 30, }, ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment, "id") @@ -522,7 +522,7 @@ def test_centre_sample_with_blower_uses_correct_params_from_queue_params( "q_max": 30, }, ), - "sample": make_sample("test_8_1", ""), + "sample": make_sample("test_8_1", "", composition="chemical"), }, } @@ -533,7 +533,7 @@ def test_session_and_number_of_tasks_per_experiment_is_expected(): experiment_definition=ExperimentDefinition( name=" ", id="", data={"time_per_pdf": 100, "q_max": 30} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment, "id") @@ -548,7 +548,7 @@ def test_experiment_with_correct_experiment_type_are_converted(): experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 30} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) task = TaskWithPosition( @@ -572,7 +572,7 @@ def test_experiment_with_no_temperatures_runs_a_room_temperature_collection(): experiment_definition=ExperimentDefinition( name="", id="", data={"time_per_pdf": 100, "q_max": 30} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment, "id") @@ -584,7 +584,7 @@ def test_experiment_with_no_temperatures_runs_a_room_temperature_collection(): "experiment_definition": ExperimentDefinition( name="", id="", data={"time_per_pdf": 100, "q_max": 30} ), - "sample": make_sample("test_8_1", ""), + "sample": make_sample("test_8_1", "", composition="chemical"), } @@ -604,7 +604,7 @@ def test_experiment_with_temperatures_runs_a_blower_collection(): experiment = Experiment( name="test_experiment", experiment_definition=experiment_definition, - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment, "id") @@ -617,7 +617,7 @@ def test_experiment_with_temperatures_runs_a_blower_collection(): assert tasks[4].params["scan_type"] == ScanType.DATA_COLLECTION assert tasks[4].params["metadata"] == { "experiment_definition": experiment_definition, - "sample": make_sample("test_8_1", ""), + "sample": make_sample("test_8_1", "", composition="chemical"), } @@ -668,7 +668,7 @@ def test_wait_for_beam_plans_added_by_converter(): experiment = Experiment( name="test_experiment", experiment_definition=experiment_definition, - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment, "id") @@ -699,13 +699,13 @@ def test_tiled_backgrounds_added_to_metadata_if_present(): experiment = Experiment( name="test_experiment", experiment_definition=experiment_definition, - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = converter._construct_blueapi_tasks_from_experiment(experiment, "id") assert tasks[4].params["metadata"] == { "experiment_definition": experiment_definition, - "sample": make_sample("test_8_1", ""), + "sample": make_sample("test_8_1", "", composition="chemical"), "auxiliary_scans": { AuxiliaryScanType.EMPTY_CAPILLARY: TiledAuxiliary( instrument_session="cm12345-1", @@ -727,7 +727,7 @@ def test_mix_of_experiments_with_correct_experiment_type_are_converted(): experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 30} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) good_task = TaskWithPosition( @@ -764,7 +764,7 @@ def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks( experiment_definition=ExperimentDefinition( name="run_full_collection", id="", data={"time_per_pdf": 100, "q_max": 40} ), - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) task = Task( @@ -1062,9 +1062,13 @@ async def test_auxiliary_scans_have_their_own_required_tiled_auxiliaries_added_t converter._tiled_auxiliary_scans[task.id][AuxiliaryScanType.AIR] == air_tiled_scan ) - assert task.blueapi_calls[2].task_request.params["metadata"][ - "auxiliary_scans" - ] == {AuxiliaryScanType.AIR: air_tiled_scan.model_dump()} + assert any( + "metadata" in call.task_request.params + and "auxiliary_scans" in call.task_request.params["metadata"] + and call.task_request.params["metadata"]["auxiliary_scans"] + == {AuxiliaryScanType.AIR: air_tiled_scan.model_dump()} + for call in task.blueapi_calls + ) async def test_queue_with_i15_1_converter_can_sync(queue_with_i15_1_plugin: TaskQueue): @@ -1188,14 +1192,12 @@ def test__ensure_background_in_queue_or_tiled_saves_tiled_info_if_exists( (1, ScanType.AIR), # 2 is robot load # 3 is wait_for_beam - # 4 is centring - # 5 is wait_for_beam - (6, ScanType.EMPTY_CAPILLARY), - # 7 is robot unload + (4, ScanType.EMPTY_CAPILLARY), + # 5 is robot unload # etc - (12, ScanType.EMPTY_CAPILLARY), - (18, ScanType.STANDARD_SAMPLE), - (24, ScanType.DATA_COLLECTION), + (8, ScanType.EMPTY_CAPILLARY), + (14, ScanType.STANDARD_SAMPLE), + (20, ScanType.DATA_COLLECTION), ], ) async def test_queued_data_collections_have_correct_scan_type_parameter( @@ -1228,7 +1230,7 @@ def test_i15_1_tasks_can_be_serialised(): experiment = Experiment( name="test_experiment", experiment_definition=experiment_definition, - sample=make_sample("test_8_1", ""), + sample=make_sample("test_8_1", "", composition="chemical"), instrument_session="cm12345-1", ) tasks = converter._construct_blueapi_tasks_from_experiment(experiment, "id") diff --git a/tests/unit_tests/test_api.py b/tests/unit_tests/test_api.py index 1dd51775..de777037 100644 --- a/tests/unit_tests/test_api.py +++ b/tests/unit_tests/test_api.py @@ -158,7 +158,7 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "sample": { "name": "test_8_2", "id": "2", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -198,7 +198,7 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "sample": { "name": "test_8_3", "id": "3", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -238,7 +238,7 @@ def test_get_queued_tasks_returns_queued_task(test_client: TestClient): "sample": { "name": "test_8_4", "id": "4", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -285,7 +285,7 @@ def test_get_queued_tasks_can_filter_by_task_status(test_client: TestClient): "sample": { "name": "test_8_2", "id": "2", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -342,7 +342,7 @@ async def test_get_all_tasks_can_filter_by_task_status(test_client: TestClient): "sample": { "name": "test_8_1", "id": "1", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -693,7 +693,7 @@ async def test_cancel_tasks_removes_task_from_queue_and_returns_tasks( "sample": { "name": "test_8_3", "id": "3", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -733,7 +733,7 @@ async def test_cancel_tasks_removes_task_from_queue_and_returns_tasks( "sample": { "name": "test_8_4", "id": "4", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": {"id": "", "positionInParent": {"position": 2}}, "positionInContainer": {"position": 2}, }, @@ -845,7 +845,7 @@ async def test_cancel_all_tasks_removes_all_queued_tasks_from_queue_and_returns_ "sample": { "name": "test_8_3", "id": "3", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": { "id": "", "positionInParent": { @@ -892,7 +892,7 @@ async def test_cancel_all_tasks_removes_all_queued_tasks_from_queue_and_returns_ "sample": { "name": "test_8_4", "id": "4", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": { "id": "", "positionInParent": { @@ -945,7 +945,7 @@ def test_get_task_by_position_returns_expected_task(test_client: TestClient): "sample": { "name": "test_8_3", "id": "3", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": { "id": "", "positionInParent": { @@ -997,7 +997,7 @@ def test_get_task_by_id_returns_expected_task(test_client: TestClient): "sample": { "name": "test_8_3", "id": "3", - "data": {"capillary": "fq1.0"}, + "data": {"capillary": "fq1.0", "composition": "chemical"}, "container": { "id": "", "positionInParent": {