diff --git a/src/main.py b/src/main.py index 5a4a762..4fa542f 100644 --- a/src/main.py +++ b/src/main.py @@ -115,19 +115,19 @@ def deduplicate_instruments_from_layers(layers): chambers.append(instruments["deposition_chamber"]) rheeds.append(instruments["rheed_system"]) elegant_dict[f"layer_{lyr.layer_number}"] = { - "Laser Systems": instruments["laser_system"], - "Deposition Chamber": instruments["deposition_chamber"], - "RHEED Systems": instruments["rheed_system"], + "laser_system": instruments["laser_system"], + "deposition_chamber": instruments["deposition_chamber"], + "rheed_system": instruments["rheed_system"], } ded_lasers = list( set( lasers ) ) ded_chambers = list( set( chambers ) ) ded_rheeds = list( set( rheeds ) ) elegant_dict["multilayer"] = { # Keep key names human readable since they're used in the messages of the following errors - "Laser Systems": ", ".join(ded_lasers), - "Deposition Chamber": ", ".join(ded_chambers), - "RHEED Systems": ", ".join(ded_rheeds) - } # dictionary's name's a joke + "laser_system": ", ".join(ded_lasers), + "deposition_chamber": ", ".join(ded_chambers), + "rheed_system": ", ".join(ded_rheeds) + } # dictionary's name is a joke # updated_dict = {} # use this for containing the final dataset # for ded in elegant_dict: # if len(elegant_dict[ded]) == 0: @@ -183,6 +183,7 @@ def make_nexus_schema_dictionary(substrate_object, layers): ''' Main function, takes all the other functions to reconstruct the full dataset. Takes a Substrate-class object (output of the chain_entrypoint_to_batch() function) and a list of Layer-class objects (output of the chain_entrypoint_to_layers() function), returns dictionary with the same schema as the NeXus standard for PLD fabrications. ''' + instruments = deduplicate_instruments_from_layers(layers) pld_fabrication = { "sample": { "substrate": { @@ -205,7 +206,7 @@ def make_nexus_schema_dictionary(substrate_object, layers): }, "multilayer": {}, }, - "instruments_used": deduplicate_instruments_from_layers(layers), + "instruments_used": instruments["multilayer"], } multilayer = pld_fabrication["sample"]["multilayer"] for layer in layers: @@ -305,6 +306,7 @@ def make_nexus_schema_dictionary(substrate_object, layers): "units": layer.post_annealing_duration_unit, }, }, + "instruments_used": instruments[name], } return pld_fabrication @@ -365,6 +367,9 @@ def build_nexus_file(pld_fabrication, output_path, rheed_osc=None): nx_post_annealing = nx_layer.create_group("post_annealing") nx_post_annealing.attrs["NX_class"] = "NXprocess" post_ann_dict = layer_dict["post_annealing"] + nx_layer_instruments = nx_layer.create_group("instruments_used") + nx_layer_instruments.attrs["NX_class"] = "NXinstrument" + layer_instruments_dict = layer_dict["instruments_used"] ## Target metadata try: @@ -435,6 +440,12 @@ def build_nexus_file(pld_fabrication, output_path, rheed_osc=None): nx_post_annealing["duration"].attrs["units"] = post_ann_dict["duration"]["units"] except TypeError as te: raise TypeError(te) + try: + nx_layer_instruments.create_dataset("laser_system", data = layer_instruments_dict["laser_system"]) + nx_layer_instruments.create_dataset("deposition_chamber", data = layer_instruments_dict["deposition_chamber"]) + nx_layer_instruments.create_dataset("rheed_system", data = layer_instruments_dict["rheed_system"]) + except TypeError as te: + raise TypeError(te) # Instruments used section nx_instruments = nx_pld_entry.create_group("instruments_used")