diff --git a/src/main.py b/src/main.py index c16b976..992fc44 100644 --- a/src/main.py +++ b/src/main.py @@ -263,11 +263,90 @@ def build_nexus_file(pld_fabrication, output_path): # Sample section nx_sample = nx_pld_entry.create_group("sample") nx_sample.attrs["NX_class"] = "NXsample" + sample_dict = pld_fabrication["sample"] - # Substrate section - nx_substrate = nx_pld_entry.create_group("substrate") + # Substrate sub-section + nx_substrate = nx_sample.create_group("substrate") nx_substrate.attrs["NX_class"] = "NXsubentry" - pass + substrate_dict = sample_dict["substrate"] + try: + # Substrate fields (datasets) + nx_substrate.create_dataset("name", data=substrate_dict["name"]) + nx_substrate.create_dataset("chemical_formula", data=substrate_dict["chemical_formula"]) + nx_substrate.create_dataset("orientation", data=substrate_dict["orientation"]) + nx_substrate.create_dataset("miscut_angle", data=substrate_dict["miscut_angle"]["value"]) # float + nx_substrate["miscut_angle"].attrs["units"] = substrate_dict["miscut_angle"]["units"] + nx_substrate.create_dataset("miscut_direction", data=substrate_dict["miscut_direction"]) + nx_substrate.create_dataset("thickness", data=substrate_dict["thickness"]["value"]) # float/int + nx_substrate["thickness"].attrs["units"] = substrate_dict["thickness"]["units"] + nx_substrate.create_dataset("dimensions", data=substrate_dict["dimensions"]) + nx_substrate.create_dataset("surface_treatment", data=substrate_dict["surface_treatment"]) + nx_substrate.create_dataset("manufacturer", data=substrate_dict["manufacturer"]) + nx_substrate.create_dataset("batch_id", data=substrate_dict["batch_id"]) + except TypeError as te: + # sooner or later I'll handle this too - not today tho + raise TypeError(te) + + # Multilayer sub-section + nx_multilayer = nx_sample.create_group("multilayer") + nx_multilayer.attrs["NX_class"] = "NXsubentry" + multilayer_dict = sample_dict["multilayer"] + # Repeat FOR EACH LAYER: + for layer in multilayer_dict: + nx_layer = nx_multilayer.create_group(layer) + nx_layer.attrs["NX_class"] = "NXsubentry" + layer_dict = multilayer_dict[layer] + # Sub-groups of a layer + nx_target = nx_layer.create_group("target") + nx_target.attrs["NX_class"] = "NXsample" + target_dict = layer_dict["target"] + nx_laser_rastering = nx_layer.create_group("laser_rastering") + nx_pre_annealing = nx_layer.create_group("pre_annealing") + nx_post_annealing = nx_layer.create_group("post_annealing") + nx_laser_rastering.attrs["NX_class"] = "NXprocess" + nx_pre_annealing.attrs["NX_class"] = "NXprocess" + nx_post_annealing.attrs["NX_class"] = "NXprocess" + + try: + nx_target.create_dataset("name", data=target_dict["name"]) + nx_target.create_dataset("chemical_formula", data=target_dict["chemical_formula"]) + nx_target.create_dataset("description", data=target_dict["description"]) + nx_target.create_dataset("shape", data=target_dict["shape"]) + nx_target.create_dataset("dimensions", data=target_dict["dimensions"]) + nx_target.create_dataset("thickness", data=target_dict["thickness"]["value"]) # float/int + nx_target["thickness"].attrs["units"] = target_dict["thickness"]["units"] + nx_target.create_dataset("solid_form", data=target_dict["solid_form"]) + nx_target.create_dataset("manufacturer", data=target_dict["manufacturer"]) + nx_target.create_dataset("batch_id", data=target_dict["batch_id"]) + except TypeError as te: + raise TypeError(te) + try: + nx_layer.create_dataset("start_time", data = layer_dict["start_time"]) + nx_layer.create_dataset("operator", data = layer_dict["operator"]) + nx_layer.create_dataset("number_of_pulses", data = layer_dict["number_of_pulses"]) + nx_layer.create_dataset("deposition_time", data = layer_dict["deposition_time"]["value"]) + nx_layer["deposition_time"].attrs["units"] = layer_dict["deposition_time"]["units"] + nx_layer.create_dataset("repetition_rate", data = layer_dict["repetition_rate"]["value"]) + nx_layer["repetition_rate"].attrs["units"] = layer_dict["repetition_rate"]["units"] + nx_layer.create_dataset("temperature", data = layer_dict["temperature"]["value"]) + nx_layer["temperature"].attrs["units"] = layer_dict["temperature"]["units"] + nx_layer.create_dataset("heating_method", data = layer_dict["heating_method"]) + nx_layer.create_dataset("layer_thickness", data = layer_dict["layer_thickness"]["value"]) + nx_layer["layer_thickness"].attrs["units"] = layer_dict["layer_thickness"]["units"] + nx_layer.create_dataset("buffer_gas", data = layer_dict["buffer_gas"]) + nx_layer.create_dataset("process_pressure", data = layer_dict["process_pressure"]["value"]) + nx_layer["process_pressure"].attrs["units"] = layer_dict["process_pressure"]["units"] + nx_layer.create_dataset("heater_target_distance", data = layer_dict["heater_target_distance"]["value"]) + nx_layer["heater_target_distance"].attrs["units"] = layer_dict["heater_target_distance"]["units"] + nx_layer.create_dataset("laser_fluence", data = layer_dict["laser_fluence"]["value"]) + nx_layer["laser_fluence"].attrs["units"] = layer_dict["laser_fluence"]["units"] + nx_layer.create_dataset("laser_spot_area", data = layer_dict["laser_spot_area"]["value"]) + nx_layer["laser_spot_area"].attrs["units"] = layer_dict["laser_spot_area"]["units"] + nx_layer.create_dataset("laser_energy", data = layer_dict["laser_energy"]["value"]) + nx_layer["laser_energy"].attrs["units"] = layer_dict["laser_energy"]["units"] + except TypeError as te: + raise TypeError(te) + return if __name__=="__main__": # TO-DO: place the API base URL somewhere else. @@ -282,4 +361,5 @@ if __name__=="__main__": result = make_nexus_schema_dictionary(substrate_object, layers) # print(make_nexus_schema_dictionary(substrate_object, layers)) # debug with open (f"output/sample-{sample_name}.json", "w") as f: - json.dump(result, f, indent=3) \ No newline at end of file + json.dump(result, f, indent=3) + build_nexus_file(result, output_path=f"output/sample-{sample_name}-nexus.h5")