Compare commits
20 Commits
43a898e4e6
...
async
| Author | SHA256 | Date | |
|---|---|---|---|
| 0a879cbfe9 | |||
| f60b58f2f2 | |||
| 6f618b2340 | |||
| 38940995b5 | |||
| f686ea65b1 | |||
| 23bfdefd30 | |||
| 38d281543e | |||
| a12506b8be | |||
| 43cfd788f3 | |||
| da42de5466 | |||
| d86b35a5fe | |||
| c4903a536b | |||
| 3e85940eb6 | |||
| 820337c06e | |||
| 5a605038df | |||
| fd4c3b718a | |||
| 7b3bff854d | |||
| 4df8048e55 | |||
| 97d534c5d1 | |||
| 88aacf23c1 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,6 +1,9 @@
|
|||||||
# ignora log di h5tojson e jsontoh5
|
# ignores logs of h5tojson, jsontoh5
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
|
# ignores output json of main.py
|
||||||
|
output/*.json
|
||||||
|
|
||||||
# ---> Python
|
# ---> Python
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|||||||
0
output/placeholder
Normal file
0
output/placeholder
Normal file
@@ -33,6 +33,8 @@ class APIHandler:
|
|||||||
raise ConnectionError(f"Invalid API key or authentication method.")
|
raise ConnectionError(f"Invalid API key or authentication method.")
|
||||||
case 404:
|
case 404:
|
||||||
raise ConnectionError(f"404: Not Found. This means there's no resource with this elabid (wrong elabid?) on your eLabFTW (wrong endpoint?).")
|
raise ConnectionError(f"404: Not Found. This means there's no resource with this elabid (wrong elabid?) on your eLabFTW (wrong endpoint?).")
|
||||||
|
case 400:
|
||||||
|
raise ConnectionError(f"400: Bad Request. This means the API endpoint you tried to reach is invalid. Did you tamper with the source code? If not, contact the developer.")
|
||||||
case _:
|
case _:
|
||||||
raise ConnectionError(f"HTTP request failed with status code: {response.status_code} (NOTE: 4xx means user's fault).")
|
raise ConnectionError(f"HTTP request failed with status code: {response.status_code} (NOTE: 4xx means user's fault).")
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ class Layer:
|
|||||||
self.extra = layer_data["metadata_decoded"]["extra_fields"]
|
self.extra = layer_data["metadata_decoded"]["extra_fields"]
|
||||||
self.layer_number = self.extra["Layer Progressive Number"]["value"] # integer
|
self.layer_number = self.extra["Layer Progressive Number"]["value"] # integer
|
||||||
self.target_elabid = self.extra["Target"]["value"] # elabid
|
self.target_elabid = self.extra["Target"]["value"] # elabid
|
||||||
self.rheed_system_elabid = self.extra["RHEED System"]["value"] # elabid
|
|
||||||
self.laser_system_elabid = self.extra["Laser System"]["value"] # elabid
|
self.laser_system_elabid = self.extra["Laser System"]["value"] # elabid
|
||||||
|
self.chamber_elabid = self.extra["Chamber"]["value"] # elabid
|
||||||
|
self.rheed_system_elabid = self.extra["RHEED System"]["value"] # elabid
|
||||||
self.start_time = layer_data.get("created_at")
|
self.start_time = layer_data.get("created_at")
|
||||||
self.operator = layer_data.get("fullname")
|
self.operator = layer_data.get("fullname")
|
||||||
self.description = layer_data.get("body")
|
self.description = layer_data.get("body")
|
||||||
@@ -71,6 +72,16 @@ class Layer:
|
|||||||
# Some keys are not required and can be called through the .get() method - which is permissive and allows null values;
|
# Some keys are not required and can be called through the .get() method - which is permissive and allows null values;
|
||||||
# Other keys are required so if they can't be called (invalid or null) raise error and stop execution of the program:
|
# Other keys are required so if they can't be called (invalid or null) raise error and stop execution of the program:
|
||||||
raise KeyError(f"The provided dictionary lacks a \"{k}\" key. Check the deposition layer entry on eLabFTW and make sure you used the correct Experiment template.")
|
raise KeyError(f"The provided dictionary lacks a \"{k}\" key. Check the deposition layer entry on eLabFTW and make sure you used the correct Experiment template.")
|
||||||
|
def get_instruments(self, apikey):
|
||||||
|
raw_lasersys_data = APIHandler(apikey).get_entry_from_elabid(self.laser_system_elabid, entryType="items")
|
||||||
|
raw_chamber_data = APIHandler(apikey).get_entry_from_elabid(self.chamber_elabid, entryType="items")
|
||||||
|
raw_rheedsys_data = APIHandler(apikey).get_entry_from_elabid(self.rheed_system_elabid, entryType="items")
|
||||||
|
instruments_used = {
|
||||||
|
"laser_system": raw_lasersys_data.get("title") or None,
|
||||||
|
"deposition_chamber": raw_chamber_data.get("title") or None,
|
||||||
|
"rheed_system": raw_rheedsys_data.get("title") or None,
|
||||||
|
}
|
||||||
|
return instruments_used
|
||||||
|
|
||||||
class Entrypoint:
|
class Entrypoint:
|
||||||
'''
|
'''
|
||||||
@@ -108,8 +119,10 @@ class Material:
|
|||||||
'''
|
'''
|
||||||
def __init__(self, material_data):
|
def __init__(self, material_data):
|
||||||
try:
|
try:
|
||||||
|
self.name = material_data["title"] # required
|
||||||
self.extra = material_data["metadata_decoded"]["extra_fields"]
|
self.extra = material_data["metadata_decoded"]["extra_fields"]
|
||||||
self.compound_elabid = self.extra["Compound"]["value"]
|
self.compound_elabid = self.extra["Compound"]["value"]
|
||||||
|
self.dimensions = self.extra["Size"]["value"]
|
||||||
except KeyError as k:
|
except KeyError as k:
|
||||||
# Some keys are not required and can be called through the .get() method - which is permissive and allows null values;
|
# Some keys are not required and can be called through the .get() method - which is permissive and allows null values;
|
||||||
# Other keys are required so if they can't be called (invalid or null) raise error and stop execution of the program:
|
# Other keys are required so if they can't be called (invalid or null) raise error and stop execution of the program:
|
||||||
@@ -130,6 +143,34 @@ class Material:
|
|||||||
formula = self.get_compound_data(apikey).get("chemical_formula")
|
formula = self.get_compound_data(apikey).get("chemical_formula")
|
||||||
return formula
|
return formula
|
||||||
|
|
||||||
|
class Substrate(Material):
|
||||||
|
def __init__(self, material_data):
|
||||||
|
super().__init__(material_data)
|
||||||
|
try:
|
||||||
|
self.orientation = self.extra["Orientation"]["value"]
|
||||||
|
self.miscut_angle = self.extra["Miscut Angle"]["value"]
|
||||||
|
self.miscut_direction = self.extra["Miscut Direction"]["value"]
|
||||||
|
# Not present (yet) on eLabFTW for Substrates:
|
||||||
|
self.thickness = None #self.extra["Thickness"]["value"]
|
||||||
|
self.surface_treatment = self.extra["Surface treatment"]["value"]
|
||||||
|
self.manufacturer = self.extra["Supplier"]["value"]
|
||||||
|
self.batch_id = self.extra["Batch ID"]["value"]
|
||||||
|
except KeyError as k:
|
||||||
|
raise KeyError(f"The provided dictionary lacks a \"{k}\" key - which is specific for substrates. Check the {self.name} substrate entry on eLabFTW and make sure you used the correct Resource template.")
|
||||||
|
|
||||||
|
class Target(Material):
|
||||||
|
def __init__(self, material_data):
|
||||||
|
super().__init__(material_data)
|
||||||
|
try:
|
||||||
|
self.thickness = self.extra["Thickness"]["value"]
|
||||||
|
self.shape = self.extra["shape"]["value"]
|
||||||
|
self.solid_form = self.extra["Solid form"]["value"]
|
||||||
|
self.manufacturer = self.extra["Supplier"]["value"]
|
||||||
|
except KeyError as k:
|
||||||
|
raise KeyError(f"The provided dictionary lacks a \"{k}\" key - which is specific for PLD targets. Check the {self.name} target entry on eLabFTW and make sure you used the correct Resource template.")
|
||||||
|
# Non-required attributes:
|
||||||
|
self.description = material_data.get("body") or ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
|
|||||||
213
src/main.py
213
src/main.py
@@ -5,6 +5,11 @@ from classes import *
|
|||||||
|
|
||||||
|
|
||||||
def call_entrypoint_from_elabid(elabid):
|
def call_entrypoint_from_elabid(elabid):
|
||||||
|
'''
|
||||||
|
Calls an entrypoint sample from eLabFTW using its elabid, then returns an object of the Entrypoint class.
|
||||||
|
|
||||||
|
If the entry is not a sample (category_title not matching exactly "Sample") returns ValueError.
|
||||||
|
'''
|
||||||
try:
|
try:
|
||||||
sample_data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType="items")
|
sample_data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType="items")
|
||||||
if not sample_data.get("category_title") == "Sample":
|
if not sample_data.get("category_title") == "Sample":
|
||||||
@@ -15,17 +20,33 @@ def call_entrypoint_from_elabid(elabid):
|
|||||||
return sample_object # Entrypoint-class object
|
return sample_object # Entrypoint-class object
|
||||||
|
|
||||||
def call_material_from_elabid(elabid):
|
def call_material_from_elabid(elabid):
|
||||||
|
'''
|
||||||
|
Calls a material from eLabFTW using its elabid, then returns an object of the Material class.
|
||||||
|
|
||||||
|
If the entry is neither a PLD Target or a Substrate batch returns ValueError. Such entries always have a category_title key with its value matching exactly "PLD Target" or "Substrate".
|
||||||
|
Because of an old typo, the value "Subtrate" (second 's' is missing) is also accepted.
|
||||||
|
'''
|
||||||
try:
|
try:
|
||||||
material_data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType="items")
|
material_data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType="items")
|
||||||
|
material_category = material_data.get("category_title")
|
||||||
# TO-DO: correct this typo on elabftw: Subtrate → Substrate.
|
# TO-DO: correct this typo on elabftw: Subtrate → Substrate.
|
||||||
if not sample_data.get("category_title") in ["PLD Target", "Substrate batch", "Subtrate batch"]:
|
if not material_category in ["PLD Target", "Substrate", "Subtrate"]:
|
||||||
|
print(f"Category of the resource: {material_category}.")
|
||||||
raise ValueError(f"The referenced resource (elabid = {elabid}) is not a material.")
|
raise ValueError(f"The referenced resource (elabid = {elabid}) is not a material.")
|
||||||
material_object = Material(material_data)
|
elif material_category == "PLD Target":
|
||||||
|
material_object = Target(material_data)
|
||||||
|
else:
|
||||||
|
material_object = Substrate(material_data)
|
||||||
except ConnectionError as e:
|
except ConnectionError as e:
|
||||||
raise ConnectionError(e)
|
raise ConnectionError(e)
|
||||||
return material_object # Material-class object
|
return material_object # Material-class object
|
||||||
|
|
||||||
def call_layers_from_list(elabid_list):
|
def call_layers_from_list(elabid_list):
|
||||||
|
'''
|
||||||
|
Calls a list of (PLD deposition) experiments from eLabFTW using their elabid - which means the input must be a list of integers instead of a single one - then returns a list of Layer-class objects.
|
||||||
|
|
||||||
|
If one of the entries is not related to a deposition layer (category_title not matching exactly "PLD Deposition") that entry is skipped, with no error raised.
|
||||||
|
'''
|
||||||
list_of_layers = []
|
list_of_layers = []
|
||||||
for elabid in elabid_list:
|
for elabid in elabid_list:
|
||||||
try:
|
try:
|
||||||
@@ -37,64 +58,158 @@ def call_layers_from_list(elabid_list):
|
|||||||
except ConnectionError as e:
|
except ConnectionError as e:
|
||||||
nums = [ layer.layer_number for layer in list_of_layers ]
|
nums = [ layer.layer_number for layer in list_of_layers ]
|
||||||
nums.sort()
|
nums.sort()
|
||||||
print(f"LISTA DEI LAYER PROCESSATI FINORA (in ordine sparso):\n" + str(nums))
|
print(f"LIST OF THE LAYERS PROCESSED (unordered):\n" + str(nums))
|
||||||
raise ConnectionError(f"An error occurred while fetching the experiment with elabid = {elabid}:\n" +
|
raise ConnectionError(f"An error occurred while fetching the experiment with elabid = {elabid}:\n" +
|
||||||
str(e) + f"\nPlease solve the problem before retrying." + "\n\n" +
|
str(e) + f"\nPlease solve the problem before retrying." + "\n\n" +
|
||||||
f"Last resource attempted to call: {ELABFTW_API_URL}/experiments/{elabid}"
|
f"Last resource attempted to call: {ELABFTW_API_URL}/experiments/{elabid}"
|
||||||
)
|
)
|
||||||
return list_of_layers # list of Layer-class objects
|
return list_of_layers # list of Layer-class objects
|
||||||
|
|
||||||
def from_entrypoint_to_material(sample_object):
|
def chain_entrypoint_to_batch(sample_object):
|
||||||
|
'''
|
||||||
|
Takes an Entrypoint-class object, looks at its .batch_elabid attribute and returns a Material-class object containing data on the substrate batch associated to the starting sample.
|
||||||
|
|
||||||
|
Dependency: call_material_from_elabid.
|
||||||
|
'''
|
||||||
material_elabid = sample_object.batch_elabid
|
material_elabid = sample_object.batch_elabid
|
||||||
material_object = call_material_from_elabid(material_elabid)
|
material_object = call_material_from_elabid(material_elabid)
|
||||||
return sample_object, material_object
|
return material_object
|
||||||
|
|
||||||
sample_object = call_entrypoint_from_elabid(elabid)
|
def chain_entrypoint_to_layers(sample_object):
|
||||||
from_entrypoint_to_material(sample_object)
|
'''
|
||||||
|
Takes an Entrypoint-class object, looks at its .linked_experiments_elabid attribute (list) and returns a list of Layer-class objects containing data on the deposition layers associated to the starting sample - using the function call_layers_from_list.
|
||||||
|
|
||||||
|
The list is sorted by progressive layer number (layer_number attribute).
|
||||||
|
|
||||||
|
Dependency: call_layers_from_list.
|
||||||
|
'''
|
||||||
|
linked_experiments_elabid = sample_object.linked_experiments_elabid # list of elabid
|
||||||
|
layer_object_list = call_layers_from_list(linked_experiments_elabid)
|
||||||
|
layer_object_list.sort(key=lambda x: x.layer_number)
|
||||||
|
return layer_object_list
|
||||||
|
|
||||||
|
def chain_layer_to_target(layer_object):
|
||||||
|
'''
|
||||||
|
Takes a Layer-class object, looks at its .target_elabid attribute and returns a Material-class object containing data on the PLD target used in the deposition of said layer.
|
||||||
|
|
||||||
|
Dependency: call_material_from_elabid.
|
||||||
|
'''
|
||||||
|
target_elabid = layer_object.target_elabid
|
||||||
|
material_object = call_material_from_elabid(target_elabid)
|
||||||
|
return material_object
|
||||||
|
|
||||||
|
def deduplicate_instruments_from_layers(layers):
|
||||||
|
'''
|
||||||
|
Takes a list of Layer-class objects and for each layer gets the instruments used (laser, depo chamber and RHEED), returns deduplicated list. Ideally, the lists should only contain one element.
|
||||||
|
'''
|
||||||
|
lasers = []
|
||||||
|
chambers = []
|
||||||
|
rheeds = []
|
||||||
|
for lyr in layers:
|
||||||
|
instruments = lyr.get_instruments(apikey)
|
||||||
|
lasers.append(instruments["laser_system"])
|
||||||
|
chambers.append(instruments["deposition_chamber"])
|
||||||
|
rheeds.append(instruments["rheed_system"])
|
||||||
|
instruments_used_dict = {
|
||||||
|
"laser_system": list( set( lasers ) ),
|
||||||
|
"deposition_chamber": list( set( chambers ) ),
|
||||||
|
"rheed_system" : list( set( rheeds ) ),
|
||||||
|
}
|
||||||
|
# lasers = { f"layer_{lyr.layer_number}": lyr.laser_system for lyr in layers }
|
||||||
|
# chambers = { f"layer_{lyr.layer_number}": lyr.deposition_chamber for lyr in layers }
|
||||||
|
# rheeds = { f"layer_{lyr.layer_number}": lyr.rheed_system for lyr in layers }
|
||||||
|
# instruments_used_dict = {
|
||||||
|
# "laser_system": lasers,
|
||||||
|
# "deposition_chamber": chambers,
|
||||||
|
# "rheed_system": rheeds,
|
||||||
|
# }
|
||||||
|
return instruments_used_dict
|
||||||
|
|
||||||
|
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.
|
||||||
|
'''
|
||||||
|
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": {},
|
||||||
|
},
|
||||||
|
"instruments_used": deduplicate_instruments_from_layers(layers),
|
||||||
|
}
|
||||||
|
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,
|
||||||
|
"start_time": layer.start_time,
|
||||||
|
"operator": layer.operator,
|
||||||
|
"description": layer.description,
|
||||||
|
"number_of_pulses": layer.number_of_pulses,
|
||||||
|
"deposition_time": layer.deposition_time,
|
||||||
|
"temperature": layer.temperature,
|
||||||
|
"heating_method": layer.heating_method,
|
||||||
|
"layer_thickness": layer.layer_thickness,
|
||||||
|
"buffer_gas": layer.buffer_gas,
|
||||||
|
"process_pressure": layer.process_pressure,
|
||||||
|
"heater_target_distance": layer.heater_target_distance,
|
||||||
|
"repetition_rate": layer.repetition_rate,
|
||||||
|
"laser_fluence": layer.laser_fluence,
|
||||||
|
"laser_spot_area": layer.laser_spot_area,
|
||||||
|
"laser_energy": layer.laser_energy,
|
||||||
|
"laser_rastering": {
|
||||||
|
"geometry": layer.laser_rastering_geometry,
|
||||||
|
"positions": layer.laser_rastering_positions,
|
||||||
|
"velocities": layer.laser_rastering_velocities,
|
||||||
|
},
|
||||||
|
"pre_annealing": {
|
||||||
|
"ambient_gas": layer.pre_annealing_ambient_gas,
|
||||||
|
"pressure": layer.pre_annealing_pressure,
|
||||||
|
"temperature": layer.pre_annealing_temperature,
|
||||||
|
"duration": layer.pre_annealing_duration,
|
||||||
|
},
|
||||||
|
"post_annealing": {
|
||||||
|
"ambient_gas": layer.post_annealing_ambient_gas,
|
||||||
|
"pressure": layer.post_annealing_pressure,
|
||||||
|
"temperature": layer.post_annealing_temperature,
|
||||||
|
"duration": layer.post_annealing_duration,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return pld_fabrication
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
print(f"=======================\n===== DEBUG MODE! =====\n=======================\n")
|
# TO-DO: place the API base URL somewhere else.
|
||||||
ELABFTW_API_URL = "https://elabftw.fisica.unina.it/api/v2"
|
ELABFTW_API_URL = "https://elabftw.fisica.unina.it/api/v2"
|
||||||
apikey = getpass("Paste API key here: ")
|
apikey = getpass("Paste API key here: ")
|
||||||
# TEST. In production the entryType will probably just be "items" since the entrypoint is an item (sample).
|
elabid = input("Enter elabid of your starting sample [default= 1111]: ") or 1111
|
||||||
entryType = None
|
data = APIHandler(apikey).get_entry_from_elabid(elabid)
|
||||||
while entryType not in ["items", "experiments"]:
|
sample = Entrypoint(data)
|
||||||
eT = input("Enter a valid entry type [items, experiments]: ")
|
substrate_object = chain_entrypoint_to_batch(sample) # Substrate-class object
|
||||||
# This allows for a shortcut: instead of prompting the type before and the elabid after I can just prompt both at the same time - e.g. e51 is exp. 51, i1108 is item 1108...
|
layers = chain_entrypoint_to_layers(sample) # list of Layer-class objects
|
||||||
if eT[0] in ["e", "i"] and eT[-1].isnumeric():
|
result = make_nexus_schema_dictionary(substrate_object, layers)
|
||||||
try:
|
# print(make_nexus_schema_dictionary(substrate_object, layers)) # debug
|
||||||
elabid = int(eT[1:])
|
with open (f"output/sample-{elabid}.json", "w") as f:
|
||||||
eT = eT[0]
|
json.dump(result, f, indent=3)
|
||||||
except Exception:
|
|
||||||
print("Usage: i|item|items|i[ELABID] for items, e|experiment|experiments|e[ELABID] for experiments.")
|
|
||||||
continue
|
|
||||||
match eT:
|
|
||||||
case "items" | "i" | "item":
|
|
||||||
entryType = "items"
|
|
||||||
case "experiments" | "e" | "exp" | "experiment":
|
|
||||||
entryType = "experiments"
|
|
||||||
case _:
|
|
||||||
continue
|
|
||||||
# This will probably be reworked in production
|
|
||||||
try:
|
|
||||||
elabid = elabid
|
|
||||||
except NameError:
|
|
||||||
elabid = input("Input elabid here [default = 1111]: ") or 1111
|
|
||||||
data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType)
|
|
||||||
if entryType == "experiments":
|
|
||||||
layer = Layer(data)
|
|
||||||
result = layer.__dict__
|
|
||||||
result.pop("extra")
|
|
||||||
print(result)
|
|
||||||
elif entryType == "items":
|
|
||||||
if data.get("category_title") == "Sample":
|
|
||||||
item = Entrypoint(data)
|
|
||||||
elif data.get("category_title") in ["PLD Target", "Substrate"]:
|
|
||||||
item = Material(data)
|
|
||||||
print(item.get_compound_formula(apikey))
|
|
||||||
else:
|
|
||||||
raise Exception("The selected item or experiment is not in one of the following categories: [Sample, PLD Target, Substrate, PLD Deposition].")
|
|
||||||
result = item.__dict__
|
|
||||||
result.pop("extra")
|
|
||||||
print(result)
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class Layer:
|
|||||||
def __init__(self, layer_data):
|
def __init__(self, layer_data):
|
||||||
try:
|
try:
|
||||||
self.extra = layer_data["metadata_decoded"]["extra_fields"]
|
self.extra = layer_data["metadata_decoded"]["extra_fields"]
|
||||||
|
self.layer_number = self.extra["Layer Progressive Number"]["value"] # integer
|
||||||
self.target_elabid = self.extra["Target"]["value"] # elabid
|
self.target_elabid = self.extra["Target"]["value"] # elabid
|
||||||
self.rheed_system_elabid = self.extra["RHEED System"]["value"] # elabid
|
self.rheed_system_elabid = self.extra["RHEED System"]["value"] # elabid
|
||||||
self.laser_system_elabid = self.extra["Laser System"]["value"] # elabid
|
self.laser_system_elabid = self.extra["Laser System"]["value"] # elabid
|
||||||
@@ -174,14 +175,14 @@ if __name__=="__main__":
|
|||||||
eT = eT[0]
|
eT = eT[0]
|
||||||
except Exception:
|
except Exception:
|
||||||
print("Usage: i|item|items|i[ELABID] for items, e|experiment|experiments|e[ELABID] for experiments.")
|
print("Usage: i|item|items|i[ELABID] for items, e|experiment|experiments|e[ELABID] for experiments.")
|
||||||
pass
|
continue
|
||||||
match eT:
|
match eT:
|
||||||
case "items" | "i" | "item":
|
case "items" | "i" | "item":
|
||||||
entryType = "items"
|
entryType = "items"
|
||||||
case "experiments" | "e" | "exp" | "experiment":
|
case "experiments" | "e" | "exp" | "experiment":
|
||||||
entryType = "experiments"
|
entryType = "experiments"
|
||||||
case _:
|
case _:
|
||||||
pass
|
continue
|
||||||
# This will probably be reworked in production
|
# This will probably be reworked in production
|
||||||
try:
|
try:
|
||||||
elabid = elabid
|
elabid = elabid
|
||||||
@@ -198,10 +199,9 @@ if __name__=="__main__":
|
|||||||
item = Entrypoint(data)
|
item = Entrypoint(data)
|
||||||
elif data.get("category_title") in ["PLD Target", "Substrate"]:
|
elif data.get("category_title") in ["PLD Target", "Substrate"]:
|
||||||
item = Material(data)
|
item = Material(data)
|
||||||
print(item.get_compound_formula())
|
print(item.get_compound_formula(apikey))
|
||||||
|
else:
|
||||||
|
raise Exception("The selected item or experiment is not in one of the following categories: [Sample, PLD Target, Substrate, PLD Deposition].")
|
||||||
result = item.__dict__
|
result = item.__dict__
|
||||||
result.pop("extra")
|
result.pop("extra")
|
||||||
print(result)
|
print(result)
|
||||||
# print(json.dumps(chain.sample_data))
|
|
||||||
# print(json.dumps(chain.linked_experiments))
|
|
||||||
# print(chain.batch_elabid)
|
|
||||||
480
tests/layer_A.json
Normal file
480
tests/layer_A.json
Normal file
@@ -0,0 +1,480 @@
|
|||||||
|
{
|
||||||
|
"access_key": null,
|
||||||
|
"body": "",
|
||||||
|
"body_html": "",
|
||||||
|
"canread": "{\"base\": 40, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canread_is_immutable": 0,
|
||||||
|
"canwrite": "{\"base\": 20, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canwrite_is_immutable": 0,
|
||||||
|
"category": 2,
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"comments": [],
|
||||||
|
"compounds": [],
|
||||||
|
"containers": [],
|
||||||
|
"content_type": 1,
|
||||||
|
"created_at": "2026-02-09 09:53:50",
|
||||||
|
"custom_id": null,
|
||||||
|
"date": "2026-02-09",
|
||||||
|
"elabid": "20260209-8ba774f27896bbec37a7cc5eab18747dbac3a4fb",
|
||||||
|
"events_start": null,
|
||||||
|
"events_start_itemid": null,
|
||||||
|
"exclusive_edit_mode": null,
|
||||||
|
"experiments_links": [
|
||||||
|
{
|
||||||
|
"entityid": 59,
|
||||||
|
"title": "Na-26-015 lao on stocazzo",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260209-554888c7b8a17efd963fece04426f6ec5722fa8a",
|
||||||
|
"link_state": 1,
|
||||||
|
"page": "experiments.php",
|
||||||
|
"type": "experiments",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"firstname": "Emiliano",
|
||||||
|
"fullname": "Emiliano Di Gennaro",
|
||||||
|
"id": 58,
|
||||||
|
"is_pinned": 0,
|
||||||
|
"items_links": [
|
||||||
|
{
|
||||||
|
"entityid": 1075,
|
||||||
|
"title": "ETO single crystal",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-6f77512fa5a3c5803fcfc64797ffa003429094dc",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "PLD Target",
|
||||||
|
"category_color": "1a5fb4",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1074,
|
||||||
|
"title": "LAO single crystal",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-2cef9e71c0ff4aa15062cb6562f64f6ac3a366fb",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "PLD Target",
|
||||||
|
"category_color": "1a5fb4",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1099,
|
||||||
|
"title": "Coherent Excimer Laser (KrF 248 nm)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-9175c1674aef9947736fbc12447f912c8ea9bc81",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1096,
|
||||||
|
"title": "PLD Chamber I (small area)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-19cf5d06fd119f841383f21db1c29eebfad550c5",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 1,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1098,
|
||||||
|
"title": "STAIB RHEED 30",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-5df7738907b198451c19296ab07e5093d12a3ead",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1111,
|
||||||
|
"title": "Na-26-015",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260209-6e19f19795b7ea79594a35d9a11da1896b13453e",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Sample",
|
||||||
|
"category_color": "ffbe6f",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lastchangeby": 2,
|
||||||
|
"lastname": "Di Gennaro",
|
||||||
|
"locked": 0,
|
||||||
|
"locked_at": null,
|
||||||
|
"lockedby": null,
|
||||||
|
"metadata": "{\"elabftw\": {\"extra_fields_groups\": [{\"id\": 1, \"name\": \"Process\"}, {\"id\": 2, \"name\": \"Laser\"}, {\"id\": 3, \"name\": \"Pre Annealing\"}, {\"id\": 4, \"name\": \"Post Annealing\"}, {\"id\": 5, \"name\": \"Instruments\"}]}, \"extra_fields\": {\"Sample\": {\"type\": \"items\", \"value\": 1111, \"group_id\": 1, \"position\": 0, \"required\": true}, \"Target\": {\"type\": \"items\", \"value\": 1075, \"group_id\": 1, \"position\": 2, \"required\": true}, \"Chamber\": {\"type\": \"items\", \"value\": 1096, \"group_id\": 5, \"position\": 0, \"required\": true}, \"Duration\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"45\", \"group_id\": 1, \"position\": 3, \"required\": true}, \"Spot Area\": {\"type\": \"number\", \"unit\": \"mm^2\", \"units\": [\"mm^2\"], \"value\": \"0.8\", \"group_id\": 2, \"position\": 2}, \"Thickness\": {\"type\": \"number\", \"unit\": \"u.c.\", \"units\": [\"u.c.\", \"nm\"], \"value\": \"3\", \"group_id\": 1, \"position\": 4}, \"Buffer gas\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 1, \"position\": 5}, \"Duration PA\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 4, \"position\": 0}, \"Duration Pre\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 3, \"position\": 0}, \"Laser System\": {\"type\": \"items\", \"value\": 1099, \"group_id\": 5, \"position\": 1}, \"RHEED System\": {\"type\": \"items\", \"value\": 1098, \"group_id\": 5, \"position\": 2}, \"Buffer gas PA\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 4, \"position\": 1}, \"Buffer gas Pre\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 3, \"position\": 1}, \"Heating Method\": {\"type\": \"select\", \"value\": \"Radiative Heater\", \"options\": [\"Radiative Heater\", \"Laser Heater\"], \"group_id\": 1, \"position\": 9}, \"Laser Intensity\": {\"type\": \"number\", \"unit\": \"J/(s cm^2)\", \"units\": [\"J/(s cm^2)\"], \"value\": \"1.5\", \"group_id\": 2, \"position\": 0}, \"Repetition rate\": {\"type\": \"number\", \"unit\": \"Hz\", \"units\": [\"Hz\"], \"value\": \"1\", \"group_id\": 2, \"position\": 1}, \"Process pressure\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"1e-3\", \"group_id\": 1, \"position\": 6}, \"Heater temperature\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"650\", \"group_id\": 1, \"position\": 7}, \"Process pressure PA\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"\", \"group_id\": 4, \"position\": 2}, \"Process pressure Pre\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"\", \"group_id\": 3, \"position\": 2}, \"Heater temperature PA\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"\", \"group_id\": 4, \"position\": 3}, \"Laser Rastering Speed\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 4}, \"Heater temperature Pre\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"\", \"group_id\": 3, \"position\": 3}, \"Heater-target distance\": {\"type\": \"number\", \"unit\": \"mm\", \"units\": [\"mm\"], \"value\": \"45\", \"group_id\": 1, \"position\": 8}, \"Laser Rastering Geometry\": {\"type\": \"select\", \"value\": \"none\", \"options\": [\"none\", \"on a square\", \"on a rectangle\", \"on a line\", \"other\"], \"group_id\": 2, \"position\": 3}, \"Laser Rastering Position\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 5}, \"Layer Progressive Number\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"2\", \"group_id\": 1, \"position\": 1, \"required\": true}}}",
|
||||||
|
"metadata_decoded": {
|
||||||
|
"elabftw": {
|
||||||
|
"extra_fields_groups": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "Process"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Laser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Pre Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "Post Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"name": "Instruments"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra_fields": {
|
||||||
|
"Sample": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1111,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Target": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1075,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 2,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Chamber": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1096,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Duration": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "69",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 3,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Spot Area": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm^2",
|
||||||
|
"units": [
|
||||||
|
"mm^2"
|
||||||
|
],
|
||||||
|
"value": "0.8",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Thickness": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "u.c.",
|
||||||
|
"units": [
|
||||||
|
"u.c.",
|
||||||
|
"nm"
|
||||||
|
],
|
||||||
|
"value": "3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Buffer gas": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Duration PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Duration Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Laser System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1099,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"RHEED System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1098,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Buffer gas PA": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Buffer gas Pre": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Heating Method": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "Radiative Heater",
|
||||||
|
"options": [
|
||||||
|
"Radiative Heater",
|
||||||
|
"Laser Heater"
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 9
|
||||||
|
},
|
||||||
|
"Laser Intensity": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "J/(s cm^2)",
|
||||||
|
"units": [
|
||||||
|
"J/(s cm^2)"
|
||||||
|
],
|
||||||
|
"value": "1.5",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Repetition rate": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "Hz",
|
||||||
|
"units": [
|
||||||
|
"Hz"
|
||||||
|
],
|
||||||
|
"value": "1",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Process pressure": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "1e-3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 6
|
||||||
|
},
|
||||||
|
"Heater temperature": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "650",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 7
|
||||||
|
},
|
||||||
|
"Process pressure PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Process pressure Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Heater temperature PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Speed": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Heater temperature Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Heater-target distance": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm",
|
||||||
|
"units": [
|
||||||
|
"mm"
|
||||||
|
],
|
||||||
|
"value": "45",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 8
|
||||||
|
},
|
||||||
|
"Laser Rastering Geometry": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "none",
|
||||||
|
"options": [
|
||||||
|
"none",
|
||||||
|
"on a square",
|
||||||
|
"on a rectangle",
|
||||||
|
"on a line",
|
||||||
|
"other"
|
||||||
|
],
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Position": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Layer Progressive Number": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 1,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modified_at": "2026-02-09 15:16:33",
|
||||||
|
"next_step": null,
|
||||||
|
"orcid": "0000-0003-4231-9776",
|
||||||
|
"page": "experiments",
|
||||||
|
"rating": 0,
|
||||||
|
"recent_comment": null,
|
||||||
|
"related_experiments_links": [],
|
||||||
|
"related_items_links": [],
|
||||||
|
"sharelink": "https://elabftw.fisica.unina.it:8080/experiments.php?mode=view&id=58",
|
||||||
|
"state": 1,
|
||||||
|
"status": null,
|
||||||
|
"status_color": null,
|
||||||
|
"status_title": null,
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"id": 74,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add process data",
|
||||||
|
"ordering": 1,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:53",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 75,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add RHEED data",
|
||||||
|
"ordering": 2,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:54",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 76,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add RHEED images",
|
||||||
|
"ordering": 3,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:56",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": null,
|
||||||
|
"tags_id": null,
|
||||||
|
"team": 1,
|
||||||
|
"team_name": "Default team",
|
||||||
|
"timestamped": 0,
|
||||||
|
"timestamped_at": null,
|
||||||
|
"timestampedby": null,
|
||||||
|
"title": "Na-26-015 eto on lao on sto",
|
||||||
|
"type": "experiments",
|
||||||
|
"uploads": [],
|
||||||
|
"userid": 2
|
||||||
|
}
|
||||||
500
tests/layer_B.json
Normal file
500
tests/layer_B.json
Normal file
@@ -0,0 +1,500 @@
|
|||||||
|
{
|
||||||
|
"access_key": null,
|
||||||
|
"body": "",
|
||||||
|
"body_html": "",
|
||||||
|
"canread": "{\"base\": 40, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canread_is_immutable": 0,
|
||||||
|
"canwrite": "{\"base\": 20, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canwrite_is_immutable": 0,
|
||||||
|
"category": 2,
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"comments": [],
|
||||||
|
"compounds": [],
|
||||||
|
"containers": [],
|
||||||
|
"content_type": 1,
|
||||||
|
"created_at": "2026-02-09 09:32:10",
|
||||||
|
"custom_id": null,
|
||||||
|
"date": "2026-02-09",
|
||||||
|
"elabid": "20260209-554888c7b8a17efd963fece04426f6ec5722fa8a",
|
||||||
|
"events_start": null,
|
||||||
|
"events_start_itemid": null,
|
||||||
|
"exclusive_edit_mode": null,
|
||||||
|
"experiments_links": [],
|
||||||
|
"firstname": "Emiliano",
|
||||||
|
"fullname": "Emiliano Di Gennaro",
|
||||||
|
"id": 56,
|
||||||
|
"is_pinned": 0,
|
||||||
|
"items_links": [
|
||||||
|
{
|
||||||
|
"entityid": 1074,
|
||||||
|
"title": "LAO single crystal",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-2cef9e71c0ff4aa15062cb6562f64f6ac3a366fb",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "PLD Target",
|
||||||
|
"category_color": "1a5fb4",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1099,
|
||||||
|
"title": "Coherent Excimer Laser (KrF 248 nm)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-9175c1674aef9947736fbc12447f912c8ea9bc81",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1096,
|
||||||
|
"title": "PLD Chamber I (small area)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-19cf5d06fd119f841383f21db1c29eebfad550c5",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 1,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1098,
|
||||||
|
"title": "STAIB RHEED 30",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-5df7738907b198451c19296ab07e5093d12a3ead",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1111,
|
||||||
|
"title": "Na-26-015",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260209-6e19f19795b7ea79594a35d9a11da1896b13453e",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Sample",
|
||||||
|
"category_color": "ffbe6f",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lastchangeby": 2,
|
||||||
|
"lastname": "Di Gennaro",
|
||||||
|
"locked": 0,
|
||||||
|
"locked_at": null,
|
||||||
|
"lockedby": null,
|
||||||
|
"metadata": "{\"elabftw\": {\"extra_fields_groups\": [{\"id\": 1, \"name\": \"Process\"}, {\"id\": 2, \"name\": \"Laser\"}, {\"id\": 3, \"name\": \"Pre Annealing\"}, {\"id\": 4, \"name\": \"Post Annealing\"}, {\"id\": 5, \"name\": \"Instruments\"}]}, \"extra_fields\": {\"Sample\": {\"type\": \"items\", \"value\": 1111, \"group_id\": 1, \"position\": 0, \"required\": true}, \"Target\": {\"type\": \"items\", \"value\": 1074, \"group_id\": 1, \"position\": 2, \"required\": true}, \"Chamber\": {\"type\": \"items\", \"value\": 1096, \"group_id\": 5, \"position\": 0, \"required\": true}, \"Duration\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"128\", \"group_id\": 1, \"position\": 3, \"required\": true}, \"Spot Area\": {\"type\": \"number\", \"unit\": \"mm^2\", \"units\": [\"mm^2\"], \"value\": \"0.8\", \"group_id\": 2, \"position\": 2}, \"Thickness\": {\"type\": \"number\", \"unit\": \"u.c.\", \"units\": [\"u.c.\", \"nm\"], \"value\": \"8\", \"group_id\": 1, \"position\": 4}, \"Buffer gas\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 1, \"position\": 5}, \"Duration PA\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 4, \"position\": 0}, \"Duration Pre\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 3, \"position\": 0}, \"Laser System\": {\"type\": \"items\", \"value\": 1099, \"group_id\": 5, \"position\": 1}, \"RHEED System\": {\"type\": \"items\", \"value\": 1098, \"group_id\": 5, \"position\": 2}, \"Buffer gas PA\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 4, \"position\": 1}, \"Buffer gas Pre\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 3, \"position\": 1}, \"Heating Method\": {\"type\": \"select\", \"value\": \"Radiative Heater\", \"options\": [\"Radiative Heater\", \"Laser Heater\"], \"group_id\": 1, \"position\": 9}, \"Laser Intensity\": {\"type\": \"number\", \"unit\": \"J/(s cm^2)\", \"units\": [\"J/(s cm^2)\"], \"value\": \"1.5\", \"group_id\": 2, \"position\": 0}, \"Repetition rate\": {\"type\": \"number\", \"unit\": \"Hz\", \"units\": [\"Hz\"], \"value\": \"1\", \"group_id\": 2, \"position\": 1}, \"Process pressure\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"1e-3\", \"group_id\": 1, \"position\": 6}, \"Heater temperature\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"650\", \"group_id\": 1, \"position\": 7}, \"Process pressure PA\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"\", \"group_id\": 4, \"position\": 2}, \"Process pressure Pre\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"1e-1\", \"group_id\": 3, \"position\": 2}, \"Heater temperature PA\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"\", \"group_id\": 4, \"position\": 3}, \"Laser Rastering Speed\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 4}, \"Heater temperature Pre\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"500\", \"group_id\": 3, \"position\": 3}, \"Heater-target distance\": {\"type\": \"number\", \"unit\": \"mm\", \"units\": [\"mm\"], \"value\": \"45\", \"group_id\": 1, \"position\": 8}, \"Laser Rastering Geometry\": {\"type\": \"select\", \"value\": \"none\", \"options\": [\"none\", \"on a square\", \"on a rectangle\", \"on a line\", \"other\"], \"group_id\": 2, \"position\": 3}, \"Laser Rastering Position\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 5}, \"Layer Progressive Number\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"1\", \"group_id\": 1, \"position\": 1, \"required\": true}}}",
|
||||||
|
"metadata_decoded": {
|
||||||
|
"elabftw": {
|
||||||
|
"extra_fields_groups": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "Process"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Laser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Pre Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "Post Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"name": "Instruments"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra_fields": {
|
||||||
|
"Sample": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1111,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Target": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1074,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 2,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Chamber": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1096,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Duration": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "128",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 3,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Spot Area": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm^2",
|
||||||
|
"units": [
|
||||||
|
"mm^2"
|
||||||
|
],
|
||||||
|
"value": "0.8",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Thickness": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "u.c.",
|
||||||
|
"units": [
|
||||||
|
"u.c.",
|
||||||
|
"nm"
|
||||||
|
],
|
||||||
|
"value": "8",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Buffer gas": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Duration PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Duration Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Laser System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1099,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"RHEED System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1098,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Buffer gas PA": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Buffer gas Pre": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Heating Method": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "Radiative Heater",
|
||||||
|
"options": [
|
||||||
|
"Radiative Heater",
|
||||||
|
"Laser Heater"
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 9
|
||||||
|
},
|
||||||
|
"Laser Intensity": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "J/(s cm^2)",
|
||||||
|
"units": [
|
||||||
|
"J/(s cm^2)"
|
||||||
|
],
|
||||||
|
"value": "1.5",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Repetition rate": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "Hz",
|
||||||
|
"units": [
|
||||||
|
"Hz"
|
||||||
|
],
|
||||||
|
"value": "1",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Process pressure": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "1e-3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 6
|
||||||
|
},
|
||||||
|
"Heater temperature": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "650",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 7
|
||||||
|
},
|
||||||
|
"Process pressure PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Process pressure Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "1e-1",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Heater temperature PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Speed": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Heater temperature Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "500",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Heater-target distance": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm",
|
||||||
|
"units": [
|
||||||
|
"mm"
|
||||||
|
],
|
||||||
|
"value": "45",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 8
|
||||||
|
},
|
||||||
|
"Laser Rastering Geometry": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "none",
|
||||||
|
"options": [
|
||||||
|
"none",
|
||||||
|
"on a square",
|
||||||
|
"on a rectangle",
|
||||||
|
"on a line",
|
||||||
|
"other"
|
||||||
|
],
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Position": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Layer Progressive Number": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "1",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 1,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modified_at": "2026-02-09 15:17:40",
|
||||||
|
"next_step": "add process data",
|
||||||
|
"orcid": "0000-0003-4231-9776",
|
||||||
|
"page": "experiments",
|
||||||
|
"rating": 0,
|
||||||
|
"recent_comment": null,
|
||||||
|
"related_experiments_links": [
|
||||||
|
{
|
||||||
|
"entityid": 58,
|
||||||
|
"title": "Na-26-015 eto on lao on sto",
|
||||||
|
"custom_id": null,
|
||||||
|
"link_state": 1,
|
||||||
|
"page": "experiments.php",
|
||||||
|
"type": "experiments",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"related_items_links": [],
|
||||||
|
"sharelink": "https://elabftw.fisica.unina.it:8080/experiments.php?mode=view&id=56",
|
||||||
|
"state": 1,
|
||||||
|
"status": null,
|
||||||
|
"status_color": null,
|
||||||
|
"status_title": null,
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"id": 68,
|
||||||
|
"item_id": 56,
|
||||||
|
"body": "add process data",
|
||||||
|
"ordering": 1,
|
||||||
|
"finished": 0,
|
||||||
|
"finished_time": null,
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 69,
|
||||||
|
"item_id": 56,
|
||||||
|
"body": "add RHEED data",
|
||||||
|
"ordering": 2,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:42:59",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 70,
|
||||||
|
"item_id": 56,
|
||||||
|
"body": "add RHEED images",
|
||||||
|
"ordering": 3,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:43:01",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": null,
|
||||||
|
"tags_id": null,
|
||||||
|
"team": 1,
|
||||||
|
"team_name": "Default team",
|
||||||
|
"timestamped": 0,
|
||||||
|
"timestamped_at": null,
|
||||||
|
"timestampedby": null,
|
||||||
|
"title": "Na-26-015 lao on sto",
|
||||||
|
"type": "experiments",
|
||||||
|
"uploads": [
|
||||||
|
{
|
||||||
|
"id": 75,
|
||||||
|
"real_name": "LAO_16min50s_736C_STO.bmp",
|
||||||
|
"long_name": "ce/ce536c93131cca5b3066a34fea81ae427f21d4ab851e64ff2142c99a9c3c7659805f224c582a8a11bc08d6307a6f4e6415891e506a46d346e64d7defbd2fcb7b.bmp",
|
||||||
|
"comment": null,
|
||||||
|
"item_id": 56,
|
||||||
|
"userid": 2,
|
||||||
|
"type": "experiments",
|
||||||
|
"created_at": "2026-02-09 09:42:52",
|
||||||
|
"hash": "881747c39f70a5c2691fe1fe432f81e60e1b81aa81508b103a6bbc66c4183c6c",
|
||||||
|
"hash_algorithm": "sha256",
|
||||||
|
"storage": 1,
|
||||||
|
"filesize": 308278,
|
||||||
|
"state": 1,
|
||||||
|
"immutable": 0,
|
||||||
|
"fullname": "Emiliano Di Gennaro"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 74,
|
||||||
|
"real_name": "Real-time Window Analysis ( Peak Int. ).txt",
|
||||||
|
"long_name": "18/18932061059d64b7edf332568f21507e15e61f054696fda4d88b1c431e6e04209ac1848328f7d72cb39222cdf2b250be5038e491d62809ca9e62542e54a94452.txt",
|
||||||
|
"comment": null,
|
||||||
|
"item_id": 56,
|
||||||
|
"userid": 2,
|
||||||
|
"type": "experiments",
|
||||||
|
"created_at": "2026-02-09 09:42:43",
|
||||||
|
"hash": "1dab085e81dca7c6b8380c98225bc429506ece28e51e976ae564b3b5289b58fe",
|
||||||
|
"hash_algorithm": "sha256",
|
||||||
|
"storage": 1,
|
||||||
|
"filesize": 3755169,
|
||||||
|
"state": 1,
|
||||||
|
"immutable": 0,
|
||||||
|
"fullname": "Emiliano Di Gennaro"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"userid": 2
|
||||||
|
}
|
||||||
480
tests/layer_C.json
Normal file
480
tests/layer_C.json
Normal file
@@ -0,0 +1,480 @@
|
|||||||
|
{
|
||||||
|
"access_key": null,
|
||||||
|
"body": "",
|
||||||
|
"body_html": "",
|
||||||
|
"canread": "{\"base\": 40, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canread_is_immutable": 0,
|
||||||
|
"canwrite": "{\"base\": 20, \"teams\": [], \"users\": [], \"teamgroups\": []}",
|
||||||
|
"canwrite_is_immutable": 0,
|
||||||
|
"category": 2,
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"comments": [],
|
||||||
|
"compounds": [],
|
||||||
|
"containers": [],
|
||||||
|
"content_type": 1,
|
||||||
|
"created_at": "2026-02-09 09:53:50",
|
||||||
|
"custom_id": null,
|
||||||
|
"date": "2026-02-09",
|
||||||
|
"elabid": "20260209-8ba774f27896bbec37a7cc5eab18747dbac3a4fb",
|
||||||
|
"events_start": null,
|
||||||
|
"events_start_itemid": null,
|
||||||
|
"exclusive_edit_mode": null,
|
||||||
|
"experiments_links": [
|
||||||
|
{
|
||||||
|
"entityid": 56,
|
||||||
|
"title": "Na-26-015 lao on sto",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260209-554888c7b8a17efd963fece04426f6ec5722fa8a",
|
||||||
|
"link_state": 1,
|
||||||
|
"page": "experiments.php",
|
||||||
|
"type": "experiments",
|
||||||
|
"category_title": "PLD Deposition",
|
||||||
|
"category_color": "8b8d43",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"firstname": "Emiliano",
|
||||||
|
"fullname": "Emiliano Di Gennaro",
|
||||||
|
"id": 58,
|
||||||
|
"is_pinned": 0,
|
||||||
|
"items_links": [
|
||||||
|
{
|
||||||
|
"entityid": 1075,
|
||||||
|
"title": "ETO single crystal",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-6f77512fa5a3c5803fcfc64797ffa003429094dc",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "PLD Target",
|
||||||
|
"category_color": "1a5fb4",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1074,
|
||||||
|
"title": "LAO single crystal",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-2cef9e71c0ff4aa15062cb6562f64f6ac3a366fb",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "PLD Target",
|
||||||
|
"category_color": "1a5fb4",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1099,
|
||||||
|
"title": "Coherent Excimer Laser (KrF 248 nm)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-9175c1674aef9947736fbc12447f912c8ea9bc81",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1096,
|
||||||
|
"title": "PLD Chamber I (small area)",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-19cf5d06fd119f841383f21db1c29eebfad550c5",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 1,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1098,
|
||||||
|
"title": "STAIB RHEED 30",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260126-5df7738907b198451c19296ab07e5093d12a3ead",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Process Instrument",
|
||||||
|
"category_color": "a51d2d",
|
||||||
|
"status_title": "Available",
|
||||||
|
"status_color": "6a7753"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entityid": 1111,
|
||||||
|
"title": "Na-26-015",
|
||||||
|
"custom_id": null,
|
||||||
|
"elabid": "20260209-6e19f19795b7ea79594a35d9a11da1896b13453e",
|
||||||
|
"link_state": 1,
|
||||||
|
"is_bookable": 0,
|
||||||
|
"page": "database.php",
|
||||||
|
"type": "items",
|
||||||
|
"category_title": "Sample",
|
||||||
|
"category_color": "ffbe6f",
|
||||||
|
"status_title": null,
|
||||||
|
"status_color": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lastchangeby": 2,
|
||||||
|
"lastname": "Di Gennaro",
|
||||||
|
"locked": 0,
|
||||||
|
"locked_at": null,
|
||||||
|
"lockedby": null,
|
||||||
|
"metadata": "{\"elabftw\": {\"extra_fields_groups\": [{\"id\": 1, \"name\": \"Process\"}, {\"id\": 2, \"name\": \"Laser\"}, {\"id\": 3, \"name\": \"Pre Annealing\"}, {\"id\": 4, \"name\": \"Post Annealing\"}, {\"id\": 5, \"name\": \"Instruments\"}]}, \"extra_fields\": {\"Sample\": {\"type\": \"items\", \"value\": 1111, \"group_id\": 1, \"position\": 0, \"required\": true}, \"Target\": {\"type\": \"items\", \"value\": 1075, \"group_id\": 1, \"position\": 2, \"required\": true}, \"Chamber\": {\"type\": \"items\", \"value\": 1096, \"group_id\": 5, \"position\": 0, \"required\": true}, \"Duration\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"45\", \"group_id\": 1, \"position\": 3, \"required\": true}, \"Spot Area\": {\"type\": \"number\", \"unit\": \"mm^2\", \"units\": [\"mm^2\"], \"value\": \"0.8\", \"group_id\": 2, \"position\": 2}, \"Thickness\": {\"type\": \"number\", \"unit\": \"u.c.\", \"units\": [\"u.c.\", \"nm\"], \"value\": \"3\", \"group_id\": 1, \"position\": 4}, \"Buffer gas\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 1, \"position\": 5}, \"Duration PA\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 4, \"position\": 0}, \"Duration Pre\": {\"type\": \"number\", \"unit\": \"s\", \"units\": [\"s\", \"min\"], \"value\": \"\", \"group_id\": 3, \"position\": 0}, \"Laser System\": {\"type\": \"items\", \"value\": 1099, \"group_id\": 5, \"position\": 1}, \"RHEED System\": {\"type\": \"items\", \"value\": 1098, \"group_id\": 5, \"position\": 2}, \"Buffer gas PA\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 4, \"position\": 1}, \"Buffer gas Pre\": {\"type\": \"select\", \"value\": \"O2\", \"options\": [\"O2\", \"N2\", \"Ar\", \"\"], \"group_id\": 3, \"position\": 1}, \"Heating Method\": {\"type\": \"select\", \"value\": \"Radiative Heater\", \"options\": [\"Radiative Heater\", \"Laser Heater\"], \"group_id\": 1, \"position\": 9}, \"Laser Intensity\": {\"type\": \"number\", \"unit\": \"J/(s cm^2)\", \"units\": [\"J/(s cm^2)\"], \"value\": \"1.5\", \"group_id\": 2, \"position\": 0}, \"Repetition rate\": {\"type\": \"number\", \"unit\": \"Hz\", \"units\": [\"Hz\"], \"value\": \"1\", \"group_id\": 2, \"position\": 1}, \"Process pressure\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"1e-3\", \"group_id\": 1, \"position\": 6}, \"Heater temperature\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"650\", \"group_id\": 1, \"position\": 7}, \"Process pressure PA\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"\", \"group_id\": 4, \"position\": 2}, \"Process pressure Pre\": {\"type\": \"number\", \"unit\": \"mbar\", \"units\": [\"mbar\"], \"value\": \"\", \"group_id\": 3, \"position\": 2}, \"Heater temperature PA\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"\", \"group_id\": 4, \"position\": 3}, \"Laser Rastering Speed\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 4}, \"Heater temperature Pre\": {\"type\": \"number\", \"unit\": \"\u00b0C\", \"units\": [\"\u00b0C\"], \"value\": \"\", \"group_id\": 3, \"position\": 3}, \"Heater-target distance\": {\"type\": \"number\", \"unit\": \"mm\", \"units\": [\"mm\"], \"value\": \"45\", \"group_id\": 1, \"position\": 8}, \"Laser Rastering Geometry\": {\"type\": \"select\", \"value\": \"none\", \"options\": [\"none\", \"on a square\", \"on a rectangle\", \"on a line\", \"other\"], \"group_id\": 2, \"position\": 3}, \"Laser Rastering Position\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"\", \"group_id\": 2, \"position\": 5}, \"Layer Progressive Number\": {\"type\": \"number\", \"unit\": \"\", \"units\": [], \"value\": \"2\", \"group_id\": 1, \"position\": 1, \"required\": true}}}",
|
||||||
|
"metadata_decoded": {
|
||||||
|
"elabftw": {
|
||||||
|
"extra_fields_groups": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "Process"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Laser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Pre Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "Post Annealing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"name": "Instruments"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra_fields": {
|
||||||
|
"Sample": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1111,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Target": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1075,
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 2,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Chamber": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1096,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 0,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Duration": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "45",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 3,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
"Spot Area": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm^2",
|
||||||
|
"units": [
|
||||||
|
"mm^2"
|
||||||
|
],
|
||||||
|
"value": "0.8",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Thickness": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "u.c.",
|
||||||
|
"units": [
|
||||||
|
"u.c.",
|
||||||
|
"nm"
|
||||||
|
],
|
||||||
|
"value": "3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Buffer gas": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Duration PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Duration Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "s",
|
||||||
|
"units": [
|
||||||
|
"s",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Laser System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1099,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"RHEED System": {
|
||||||
|
"type": "items",
|
||||||
|
"value": 1098,
|
||||||
|
"group_id": 5,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Buffer gas PA": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Buffer gas Pre": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "O2",
|
||||||
|
"options": [
|
||||||
|
"O2",
|
||||||
|
"N2",
|
||||||
|
"Ar",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Heating Method": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "Radiative Heater",
|
||||||
|
"options": [
|
||||||
|
"Radiative Heater",
|
||||||
|
"Laser Heater"
|
||||||
|
],
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 9
|
||||||
|
},
|
||||||
|
"Laser Intensity": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "J/(s cm^2)",
|
||||||
|
"units": [
|
||||||
|
"J/(s cm^2)"
|
||||||
|
],
|
||||||
|
"value": "1.5",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 0
|
||||||
|
},
|
||||||
|
"Repetition rate": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "Hz",
|
||||||
|
"units": [
|
||||||
|
"Hz"
|
||||||
|
],
|
||||||
|
"value": "1",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 1
|
||||||
|
},
|
||||||
|
"Process pressure": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "1e-3",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 6
|
||||||
|
},
|
||||||
|
"Heater temperature": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "650",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 7
|
||||||
|
},
|
||||||
|
"Process pressure PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Process pressure Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mbar",
|
||||||
|
"units": [
|
||||||
|
"mbar"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 2
|
||||||
|
},
|
||||||
|
"Heater temperature PA": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 4,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Speed": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 4
|
||||||
|
},
|
||||||
|
"Heater temperature Pre": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "\u00b0C",
|
||||||
|
"units": [
|
||||||
|
"\u00b0C"
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 3,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Heater-target distance": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "mm",
|
||||||
|
"units": [
|
||||||
|
"mm"
|
||||||
|
],
|
||||||
|
"value": "45",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 8
|
||||||
|
},
|
||||||
|
"Laser Rastering Geometry": {
|
||||||
|
"type": "select",
|
||||||
|
"value": "none",
|
||||||
|
"options": [
|
||||||
|
"none",
|
||||||
|
"on a square",
|
||||||
|
"on a rectangle",
|
||||||
|
"on a line",
|
||||||
|
"other"
|
||||||
|
],
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 3
|
||||||
|
},
|
||||||
|
"Laser Rastering Position": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "",
|
||||||
|
"group_id": 2,
|
||||||
|
"position": 5
|
||||||
|
},
|
||||||
|
"Layer Progressive Number": {
|
||||||
|
"type": "number",
|
||||||
|
"unit": "",
|
||||||
|
"units": [],
|
||||||
|
"value": "2",
|
||||||
|
"group_id": 1,
|
||||||
|
"position": 1,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modified_at": "2026-02-09 15:16:33",
|
||||||
|
"next_step": null,
|
||||||
|
"orcid": "0000-0003-4231-9776",
|
||||||
|
"page": "experiments",
|
||||||
|
"rating": 0,
|
||||||
|
"recent_comment": null,
|
||||||
|
"related_experiments_links": [],
|
||||||
|
"related_items_links": [],
|
||||||
|
"sharelink": "https://elabftw.fisica.unina.it:8080/experiments.php?mode=view&id=58",
|
||||||
|
"state": 1,
|
||||||
|
"status": null,
|
||||||
|
"status_color": null,
|
||||||
|
"status_title": null,
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"id": 74,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add process data",
|
||||||
|
"ordering": 1,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:53",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 75,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add RHEED data",
|
||||||
|
"ordering": 2,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:54",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 76,
|
||||||
|
"item_id": 58,
|
||||||
|
"body": "add RHEED images",
|
||||||
|
"ordering": 3,
|
||||||
|
"finished": 1,
|
||||||
|
"finished_time": "2026-02-09 09:54:56",
|
||||||
|
"deadline": null,
|
||||||
|
"deadline_notif": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tags": null,
|
||||||
|
"tags_id": null,
|
||||||
|
"team": 1,
|
||||||
|
"team_name": "Default team",
|
||||||
|
"timestamped": 0,
|
||||||
|
"timestamped_at": null,
|
||||||
|
"timestampedby": null,
|
||||||
|
"title": "Na-26-015 eto on lao on sto",
|
||||||
|
"type": "experiments",
|
||||||
|
"uploads": [],
|
||||||
|
"userid": 2
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user