diff --git a/docs/changes/newsfragments/6643.improved b/docs/changes/newsfragments/6643.improved new file mode 100644 index 00000000000..32b8b287acd --- /dev/null +++ b/docs/changes/newsfragments/6643.improved @@ -0,0 +1 @@ +Improves the DataSetDefinition class to allow users to specify metadata to be added to the resulting dataset diff --git a/src/qcodes/dataset/measurement_extensions.py b/src/qcodes/dataset/measurement_extensions.py index 481fd5352bf..3634ebb062c 100644 --- a/src/qcodes/dataset/measurement_extensions.py +++ b/src/qcodes/dataset/measurement_extensions.py @@ -37,6 +37,9 @@ class DataSetDefinition: experiment: Experiment | None = None """An optional argument specifying which Experiment this dataset should be written to""" + metadata: dict[str, Any] | None = None + """An optional dictionary of metadata that will be added to the dataset + generated by this definition""" def setup_measurement_instances( @@ -107,6 +110,11 @@ def datasaver_builder( stack.enter_context(measurement.run(parent_span=datasaver_builder_span)) for measurement in measurement_instances ] + for i, datasaver in enumerate(datasavers): + ds_def = dataset_definitions[i] + if ds_def.metadata is not None: + for key, value in ds_def.metadata.items(): + datasaver.dataset.add_metadata(tag=key, metadata=value) yield datasavers diff --git a/tests/dataset/test_measurement_extensions.py b/tests/dataset/test_measurement_extensions.py index 0bf527c56fe..34fd0e7abe3 100644 --- a/tests/dataset/test_measurement_extensions.py +++ b/tests/dataset/test_measurement_extensions.py @@ -98,8 +98,17 @@ def default_database_and_experiment_(tmp_path): def test_context(default_params, default_database_and_experiment): _ = default_database_and_experiment set1, set2, set3, meas1, meas2, meas3 = default_params + metadata_dict = { # Nesting dictionaries does NOT work here + "test_metadata": "test_meta_value_1", + "test_metadata_2": "test_meta_value_2", + } dataset_definition = [ - DataSetDefinition(name="dataset_1", independent=[set1], dependent=[meas1]), + DataSetDefinition( + name="dataset_1", + independent=[set1], + dependent=[meas1], + metadata=metadata_dict, + ), DataSetDefinition( name="dataset_2", independent=[set1, set2, set3], dependent=[meas2, meas3] ), @@ -133,6 +142,8 @@ def test_context(default_params, default_database_and_experiment): }, data_vars=(meas1.name,), ) + assert datasets[0].metadata == metadata_dict + assert_dataset_as_expected( datasets[1], dims_dict={ @@ -142,6 +153,7 @@ def test_context(default_params, default_database_and_experiment): }, data_vars=(meas2.name, meas3.name), ) + assert datasets[1].metadata == {} def test_dond_into(default_params, default_database_and_experiment):