Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 41 additions & 1 deletion src/daq_queuing_service/plugins/i15_1/i15_1_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ def construct_blueapi_calls(
history: list[TaskWithPosition],
call_history: list[BlueapiCall],
) -> list[BlueapiCall]:

call_list: list[BlueapiCall] = []

for task in queue:
Expand Down Expand Up @@ -70,6 +69,46 @@ def _construct_blueapi_tasks_from_experiment(
# Assume sample name is of form test_8_1 to load from position 8 on puck 1
_, position, puck = sample_name.split("_")

# Assume colelctions with lists of temperatures are blowers, see
# https://github.com/DiamondLightSource/crystallography-bluesky/issues/125
if "list_of_temperatures" in experiment.experiment_definition.data.keys():
data_collection = TaskRequest(
name="blower_collection",
params={
"time_per_collection": experiment.experiment_definition.data[
"time_per_pdf"
],
"exposure_time_per_frame": 0.1,
"ramp_rate_c_per_min": experiment.experiment_definition.data[
"ramp_rate"
],
"settle_time": experiment.experiment_definition.data["settle_time"],
"temperatures_celsius": experiment.experiment_definition.data[
"list_of_temperatures"
],
"metadata": {
"sample": experiment.sample,
"experiment_definition": experiment.experiment_definition,
},
},
instrument_session=experiment.instrument_session,
)
else:
data_collection = TaskRequest(
name="data_collection",
params={
"full_collection_time": experiment.experiment_definition.data[
"time_per_pdf"
],
"exposure_time_per_frame": 0.1,
"metadata": {
"sample": experiment.sample,
"experiment_definition": experiment.experiment_definition,
},
},
instrument_session=experiment.instrument_session,
)

# For air calibration scans, we need to not to robot load/unload.
# https://github.com/DiamondLightSource/daq-queuing-service/issues/83
return [
Expand All @@ -93,6 +132,7 @@ def _construct_blueapi_tasks_from_experiment(
},
instrument_session=experiment.instrument_session,
),
data_collection,
TaskRequest(
name="robot_unload",
params={},
Expand Down
80 changes: 70 additions & 10 deletions tests/unit_tests/plugins/i15-1/test_i15_1_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ def tasks_and_calls(
def test_given_sample_name_in_correct_format_then_correct_sample_loaded():
experiment = Experiment(
name="test_experiment",
experiment_definition=ExperimentDefinition(name=" ", id="", data={}),
experiment_definition=ExperimentDefinition(
name=" ", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
)
Expand All @@ -85,7 +87,9 @@ def test_given_sample_name_in_correct_format_then_correct_sample_loaded():
def test_sample_centre_uses_expected_params():
experiment = Experiment(
name="test_experiment",
experiment_definition=ExperimentDefinition(name=" ", id="", data={}),
experiment_definition=ExperimentDefinition(
name=" ", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
)
Expand All @@ -97,7 +101,9 @@ def test_sample_centre_uses_expected_params():
"steps": 20,
"exposure_time": 0.01,
"metadata": {
"experiment_definition": ExperimentDefinition(name=" ", id="", data={}),
"experiment_definition": ExperimentDefinition(
name=" ", id="", data={"time_per_pdf": 100}
),
"sample": Sample(name="test_8_1", id="", data={}),
},
}
Expand All @@ -106,12 +112,14 @@ def test_sample_centre_uses_expected_params():
def test_session_and_number_of_tasks_per_experiment_is_expected():
experiment = Experiment(
name="test_experiment",
experiment_definition=ExperimentDefinition(name=" ", id="", data={}),
experiment_definition=ExperimentDefinition(
name=" ", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
)
tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment)
assert len(tasks) == 3
assert len(tasks) == 4
for task in tasks:
assert task.instrument_session == "cm12345-1"

Expand All @@ -120,7 +128,7 @@ def test_experiment_with_correct_experiment_type_are_converted():
experiment = Experiment(
name="test_experiment",
experiment_definition=ExperimentDefinition(
name="run_full_collection", id="", data={}
name="run_full_collection", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
Expand All @@ -135,14 +143,66 @@ def test_experiment_with_correct_experiment_type_are_converted():
user=None,
)
call_list = I151Converter().construct_blueapi_calls([task], [], [])
assert len(call_list) == 3
assert len(call_list) == 4


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}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
)
tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment)
assert tasks[2].name == "data_collection"
assert tasks[2].params["full_collection_time"] == 100
assert tasks[2].params["exposure_time_per_frame"] == 0.1
assert tasks[2].params["metadata"] == {
"experiment_definition": ExperimentDefinition(
name="", id="", data={"time_per_pdf": 100}
),
"sample": Sample(name="test_8_1", id="", data={}),
}


def test_experiment_with_temperatures_runs_a_blower_collection():
experiment_definition = ExperimentDefinition(
name="",
id="",
data={
"list_of_temperatures": [100, 120],
"time_per_pdf": 100,
"settle_time": 5,
"ramp_rate": 10,
},
)

experiment = Experiment(
name="test_experiment",
experiment_definition=experiment_definition,
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
)
tasks = I151Converter()._construct_blueapi_tasks_from_experiment(experiment)
assert tasks[2].name == "blower_collection"
assert tasks[2].params["time_per_collection"] == 100
assert tasks[2].params["exposure_time_per_frame"] == 0.1
assert tasks[2].params["ramp_rate_c_per_min"] == 10
assert tasks[2].params["settle_time"] == 5
assert tasks[2].params["temperatures_celsius"] == [100, 120]
assert tasks[2].params["metadata"] == {
"experiment_definition": experiment_definition,
"sample": Sample(name="test_8_1", id="", data={}),
}


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={}
name="run_full_collection", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
Expand All @@ -167,7 +227,7 @@ class BadExperiment:
plan_task.kind = TaskKind.PLAN
tasks = [good_task, bad_task, plan_task, good_task]
call_list = I151Converter().construct_blueapi_calls(tasks, [], [])
assert len(call_list) == 7
assert len(call_list) == 9


def test_if_no_background_found_in_tiled_then_background_scan_added_to_tasks(
Expand All @@ -176,7 +236,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={}
name="run_full_collection", id="", data={"time_per_pdf": 100}
),
sample=Sample(name="test_8_1", id="", data={}),
instrument_session="cm12345-1",
Expand Down
Loading