From a12506b8bea21574f5a4f3b7972b1068c1585fafb0f207d1632876a818bb48f3 Mon Sep 17 00:00:00 2001 From: PioApocalypse Date: Fri, 13 Feb 2026 00:01:24 +0100 Subject: [PATCH] MAJOR: main.py successfully produces JSON following NeXus-schema takes API key and elabid of the "entrypoint" sample as input returns indented JSON with the reconstructed dataset! currently lacks instruments_used data (matter of minutes) and all the layer data (already present in Layer-class objects) --- src/main.py | 70 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/src/main.py b/src/main.py index dcca231..619e1a3 100644 --- a/src/main.py +++ b/src/main.py @@ -98,9 +98,44 @@ def chain_layer_to_target(layer_object): material_object = call_material_from_elabid(target_elabid) return material_object -#sample_object = call_entrypoint_from_elabid(elabid) -#from_entrypoint_to_material(sample_object) - +def make_nexus_schema_dictionary(substrate_object, layers): + pld_fabrication = { + "sample": { + "substrate": { + "name": substrate_object.name, + "chemical_formula" : substrate_object.get_compound_formula(apikey), + "orientation" : substrate_object.orientation, + "miscut_angle" : substrate_object.miscut_angle, + "miscut_direction" : substrate_object.miscut_direction, + "thickness" : substrate_object.thickness, + "dimensions" : substrate_object.dimensions, + "surface_treatment" : substrate_object.surface_treatment, + "manufacturer" : substrate_object.manufacturer, + "batch_id" : substrate_object.batch_id, + }, + "multilayer": {}, + }, + } + multilayer = pld_fabrication["sample"]["multilayer"] + for layer in layers: + name = "layer_" + layer.layer_number + target_object = chain_layer_to_target(layer) + target_dict = { + "name": target_object.name, + "chemical_formula" : target_object.get_compound_formula(apikey), + "description" : target_object.description, + "shape" : target_object.shape, + "dimensions" : target_object.dimensions, + "thickness" : target_object.thickness, + "solid_form" : target_object.solid_form, + "manufacturer" : target_object.manufacturer, + # TO-DO: currently not available: + # "batch_id" : target_object.batch_id, + } + multilayer[name] = { + "target": target_dict + } + return json.dumps(pld_fabrication, indent=2) if __name__=="__main__": print(f"=======================\n===== DEBUG MODE! =====\n=======================\n") @@ -109,22 +144,23 @@ if __name__=="__main__": elabid = input("Enter elabid of your starting sample [default= 1111]: ") or 1111 data = APIHandler(apikey).get_entry_from_elabid(elabid) sample = Entrypoint(data) - batch = chain_entrypoint_to_batch(sample) # Material-class object - bd = batch.__dict__ - bd.pop("extra") + substrate_object = chain_entrypoint_to_batch(sample) # Substrate-class object + # bd = substrate_object.__dict__ # debug + # bd.pop("extra") # debug layers = chain_entrypoint_to_layers(sample) # list of Layer-class objects - print(f"Sample name:\n{sample.name}\n") - print(f"Substrate data:\n{bd}\n") - print(f"Layers data:") + # print(f"Sample name:\n{sample.name}\n") # debug + # print(f"Substrate data:\n{bd}\n") # debug + # print(f"Layers data:") # debug + print(make_nexus_schema_dictionary(substrate_object, layers)) # debug for layer in layers: - ld = layer.__dict__ - ld.pop("extra") - tgt = chain_layer_to_target(layer) - td = tgt.__dict__ - td.pop("extra") - print(ld) - print(td) - print() + # ld = layer.__dict__ # debug + # ld.pop("extra") # debug + tgt = chain_layer_to_target(layer) # Target-class object + # td = tgt.__dict__ # debug + # td.pop("extra") # debug + # print(ld) # debug + # # print(td) # debug + # print() # debug # entryType = None # while entryType not in ["items", "experiments"]: