Compare commits

..

10 Commits

Author SHA256 Message Date
d86b35a5fe integrates sub-classes Target and Substrate in main.py 2026-02-12 16:01:10 +01:00
c4903a536b [untested] creates child classes of Material for Substrates and Targets 2026-02-12 15:53:44 +01:00
3e85940eb6 adds chained request from layer to pld target 2026-02-12 15:24:01 +01:00
820337c06e fixes category title for materials: "Substrate", not "Substrate batch"
"Substrate" is the title of the category of substrate items
"Substrate batch" is a key in a sample's dictionary
2026-02-12 15:16:35 +01:00
5a605038df fixes small residual from copy-paste in call_material_from_elabid
the fix changes "sample_data" - which was residual from copy-pasting the
call_entrypoint... function and therefore undefined - with
"material_data" which is very well defined in the previous line
2026-02-12 15:09:59 +01:00
fd4c3b718a creates chain functions to expand the dataset from the entrypoint 2026-02-12 14:58:48 +01:00
7b3bff854d adds mock layers of mock sample 26015 for testing purposes 2026-02-12 14:37:50 +01:00
4df8048e55 aligns chained requests test with main.py (Layer class) 2026-02-12 14:37:16 +01:00
97d534c5d1 documents main.py functions 2026-02-12 12:15:25 +01:00
88aacf23c1 aligns chained requests test with main.py (debug mode) 2026-02-12 11:29:40 +01:00
6 changed files with 1611 additions and 55 deletions

View File

@@ -108,8 +108,10 @@ class Material:
'''
def __init__(self, material_data):
try:
self.name = material_data["title"] # required
self.extra = material_data["metadata_decoded"]["extra_fields"]
self.compound_elabid = self.extra["Compound"]["value"]
self.dimensions = self.extra["Size"]["value"]
except KeyError as k:
# 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:
@@ -130,6 +132,32 @@ class Material:
formula = self.get_compound_data(apikey).get("chemical_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.")
if __name__=="__main__":

View File

@@ -5,6 +5,11 @@ from classes import *
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:
sample_data = APIHandler(apikey).get_entry_from_elabid(elabid, entryType="items")
if not sample_data.get("category_title") == "Sample":
@@ -15,17 +20,33 @@ def call_entrypoint_from_elabid(elabid):
return sample_object # Entrypoint-class object
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:
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.
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.")
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:
raise ConnectionError(e)
return material_object # Material-class object
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 = []
for elabid in elabid_list:
try:
@@ -37,64 +58,111 @@ def call_layers_from_list(elabid_list):
except ConnectionError as e:
nums = [ layer.layer_number for layer in list_of_layers ]
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" +
str(e) + f"\nPlease solve the problem before retrying." + "\n\n" +
f"Last resource attempted to call: {ELABFTW_API_URL}/experiments/{elabid}"
)
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_object = call_material_from_elabid(material_elabid)
return sample_object, material_object
return material_object
sample_object = call_entrypoint_from_elabid(elabid)
from_entrypoint_to_material(sample_object)
def chain_entrypoint_to_layers(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
#sample_object = call_entrypoint_from_elabid(elabid)
#from_entrypoint_to_material(sample_object)
if __name__=="__main__":
print(f"=======================\n===== DEBUG MODE! =====\n=======================\n")
ELABFTW_API_URL = "https://elabftw.fisica.unina.it/api/v2"
apikey = getpass("Paste API key here: ")
# TEST. In production the entryType will probably just be "items" since the entrypoint is an item (sample).
entryType = None
while entryType not in ["items", "experiments"]:
eT = input("Enter a valid entry type [items, experiments]: ")
# 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...
if eT[0] in ["e", "i"] and eT[-1].isnumeric():
try:
elabid = int(eT[1:])
eT = eT[0]
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)
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")
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:")
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()
# entryType = None
# while entryType not in ["items", "experiments"]:
# eT = input("Enter a valid entry type [items, experiments]: ")
# # 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...
# if eT[0] in ["e", "i"] and eT[-1].isnumeric():
# try:
# elabid = int(eT[1:])
# eT = eT[0]
# 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)

View File

@@ -42,6 +42,7 @@ class Layer:
def __init__(self, layer_data):
try:
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.rheed_system_elabid = self.extra["RHEED System"]["value"] # elabid
self.laser_system_elabid = self.extra["Laser System"]["value"] # elabid
@@ -174,14 +175,14 @@ if __name__=="__main__":
eT = eT[0]
except Exception:
print("Usage: i|item|items|i[ELABID] for items, e|experiment|experiments|e[ELABID] for experiments.")
pass
continue
match eT:
case "items" | "i" | "item":
entryType = "items"
case "experiments" | "e" | "exp" | "experiment":
entryType = "experiments"
case _:
pass
continue
# This will probably be reworked in production
try:
elabid = elabid
@@ -198,10 +199,9 @@ if __name__=="__main__":
item = Entrypoint(data)
elif data.get("category_title") in ["PLD Target", "Substrate"]:
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.pop("extra")
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
View 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
View 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
View 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
}