Skip to content

Commit 0ac8a72

Browse files
authored
Merge pull request #26 from nemocrys/dev-nomdad
Nomad: add parent ELN file
2 parents 5feabb9 + e721842 commit 0ac8a72

13 files changed

+275
-22
lines changed

multilog/devices/basler_camera.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ def init_output(self, directory="./"):
103103
f.write("time_abs,time_rel,img-name,\n")
104104
with open(f"{self.directory}/device.txt", "w", encoding="utf-8") as f:
105105
f.write(self.device_name)
106-
self.write_nomad_files(directory)
106+
self.write_nomad_file(directory)
107107

108-
def write_nomad_files(self, directory="./"):
108+
def write_nomad_file(self, directory="./"):
109109
"""Write .archive.yaml file based on device configuration.
110110
111111
Args:

multilog/devices/daq6510.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,15 +264,15 @@ def init_output(self, directory="./"):
264264
with open(self.filename, "w", encoding="utf-8") as f:
265265
f.write(units)
266266
f.write(header)
267-
self.write_nomad_files(directory)
267+
self.write_nomad_file(directory)
268268

269-
def write_nomad_files(self, directory="./"):
269+
def write_nomad_file(self, directory="./"):
270270
"""Write .archive.yaml file based on device configuration.
271271
272272
Args:
273273
directory (str, optional): Output directory. Defaults to "./".
274274
"""
275-
with open("./multilog/nomad/archive_template.yml") as f:
275+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
276276
nomad_template = yaml.safe_load(f)
277277
definitions = nomad_template.pop("definitions")
278278
data = nomad_template.pop("data")

multilog/devices/eurotherm.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ def init_output(self, directory="./"):
9191
with open(self.filename, "w", encoding="utf-8") as f:
9292
f.write(units)
9393
f.write(header)
94-
self.write_nomad_files(directory)
94+
self.write_nomad_file(directory)
9595

96-
def write_nomad_files(self, directory="./"):
96+
def write_nomad_file(self, directory="./"):
9797
"""Write .archive.yaml file based on device configuration.
9898
9999
Args:
100100
directory (str, optional): Output directory. Defaults to "./".
101101
"""
102-
with open("./multilog/nomad/archive_template.yml") as f:
102+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
103103
nomad_template = yaml.safe_load(f)
104104
definitions = nomad_template.pop("definitions")
105105
data = nomad_template.pop("data")

multilog/devices/ifm_flowmeter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,15 +167,15 @@ def init_output(self, directory="./"):
167167
with open(self.filename, "w", encoding="utf-8") as f:
168168
f.write(units)
169169
f.write(header)
170-
self.write_nomad_files(directory)
170+
self.write_nomad_file(directory)
171171

172-
def write_nomad_files(self, directory="./"):
172+
def write_nomad_file(self, directory="./"):
173173
"""Write .archive.yaml file based on device configuration.
174174
175175
Args:
176176
directory (str, optional): Output directory. Defaults to "./".
177177
"""
178-
with open("./multilog/nomad/archive_template.yml") as f:
178+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
179179
nomad_template = yaml.safe_load(f)
180180
definitions = nomad_template.pop("definitions")
181181
data = nomad_template.pop("data")

multilog/devices/optris_ip640.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ def init_output(self, directory="./"):
136136
with open(f"{self.directory}/_images.csv", "w", encoding="utf-8") as f:
137137
f.write("# datetime,s,filename,\n")
138138
f.write("time_abs,time_rel,img-name,\n")
139-
self.write_nomad_files(directory)
139+
self.write_nomad_file(directory)
140140

141-
def write_nomad_files(self, directory="./"):
141+
def write_nomad_file(self, directory="./"):
142142
"""Write .archive.yaml file based on device configuration.
143143
144144
Args:

multilog/devices/process_condition_logger.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,15 @@ def init_output(self, directory="./"):
7373
f"- {condition}: {self.meas_data[condition]} {self.condition_units[condition]}\n"
7474
)
7575
f.write("\n## Process condition log\n\n")
76-
self.write_nomad_files(directory)
76+
self.write_nomad_file(directory)
7777

78-
def write_nomad_files(self, directory="./"):
78+
def write_nomad_file(self, directory="./"):
7979
"""Write .archive.yaml file based on device configuration.
8080
8181
Args:
8282
directory (str, optional): Output directory. Defaults to "./".
8383
"""
84-
with open("./multilog/nomad/archive_template.yml") as f:
84+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
8585
nomad_template = yaml.safe_load(f)
8686
definitions = nomad_template.pop("definitions")
8787
data = nomad_template.pop("data")

multilog/devices/pyrometer_array_lumasense.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,15 @@ def init_output(self, directory="./"):
130130
with open(self.filename, "w", encoding="utf-8") as f:
131131
f.write(units)
132132
f.write(header)
133-
self.write_nomad_files(directory)
133+
self.write_nomad_file(directory)
134134

135-
def write_nomad_files(self, directory="./"):
135+
def write_nomad_file(self, directory="./"):
136136
"""Write .archive.yaml file based on device configuration.
137137
138138
Args:
139139
directory (str, optional): Output directory. Defaults to "./".
140140
"""
141-
with open("./multilog/nomad/archive_template.yml") as f:
141+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
142142
nomad_template = yaml.safe_load(f)
143143
definitions = nomad_template.pop("definitions")
144144
data = nomad_template.pop("data")

multilog/devices/pyrometer_lumasense.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,15 @@ def init_output(self, directory="./"):
149149
with open(self.filename, "w", encoding="utf-8") as f:
150150
f.write(units)
151151
f.write(header)
152-
self.write_nomad_files(directory)
152+
self.write_nomad_file(directory)
153153

154-
def write_nomad_files(self, directory="./"):
154+
def write_nomad_file(self, directory="./"):
155155
"""Write .archive.yaml file based on device configuration.
156156
157157
Args:
158158
directory (str, optional): Output directory. Defaults to "./".
159159
"""
160-
with open("./multilog/nomad/archive_template.yml") as f:
160+
with open("./multilog/nomad/archive_template_sensor.yml") as f:
161161
nomad_template = yaml.safe_load(f)
162162
definitions = nomad_template.pop("definitions")
163163
data = nomad_template.pop("data")

multilog/main.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""This module contains the controller-part of multilog. It sets up the
22
communication between device and visualization and manages the sampling
33
loop."""
4+
from copy import deepcopy
45
import shutil
56
from PyQt5.QtWidgets import QApplication
67
from PyQt5.QtCore import QTimer, QThread, QObject, pyqtSignal
@@ -293,13 +294,73 @@ def init_output_files(self):
293294
break
294295
for device in self.devices:
295296
self.devices[device].init_output(self.directory)
297+
self.write_nomad_file()
296298
self.write_metadata()
297299
shutil.copy(
298300
"./multilog/nomad/base_classes.schema.archive.yaml",
299301
f"{self.directory}/base_classes.schema.archive.yaml",
300302
)
301303
self.main_window.set_output_directory(self.directory)
302304

305+
def write_nomad_file(self):
306+
"""Write main multilog.archive.yaml including an overview of all devices."""
307+
with open("./multilog/nomad/archive_template_main.yml") as f:
308+
nomad_dict = yaml.safe_load(f)
309+
data = nomad_dict.pop("data")
310+
multilog_version = (
311+
subprocess.check_output(
312+
["git", "describe", "--tags", "--dirty", "--always"]
313+
)
314+
.strip()
315+
.decode("utf-8")
316+
)
317+
data["process"]["start_time"] = datetime.datetime.now(datetime.timezone.utc).astimezone().isoformat(timespec='milliseconds').replace('T', ' ')
318+
data["data_processing"].update(
319+
{
320+
"software": f"multilog {multilog_version}",
321+
"sampling_time": self.config["settings"]["dt-main"],
322+
"image_time": self.config["settings"]["dt-camera"],
323+
}
324+
)
325+
326+
template_ir_cam = nomad_dict.pop("instrumentation_IR-camera_template")
327+
template_camera = nomad_dict.pop("instrumentation_camera_template")
328+
template_sensor = nomad_dict.pop("instrumentation_sensors_template")
329+
for device_name in self.devices:
330+
nomad_name = device_name.replace(" ", "_").replace("-", "_")
331+
if "Optris-IP-640" in device_name:
332+
instrument = deepcopy(template_ir_cam)
333+
instrument["section"]["quantities"]["ir_camera"]["type"] = f"../upload/raw/{device_name}.archive.yaml#IR_camera"
334+
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
335+
{nomad_name: instrument}
336+
)
337+
data["instrumentation"][nomad_name] = {
338+
"ir_camera": f"../upload/raw/{device_name}.archive.yaml#data"
339+
}
340+
elif "Basler" in device_name:
341+
instrument = deepcopy(template_camera)
342+
instrument["section"]["quantities"]["camera"]["type"] = f"../upload/raw/{device_name}.archive.yaml#camera"
343+
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
344+
{nomad_name: instrument}
345+
)
346+
data["instrumentation"][nomad_name] = {
347+
"camera": f"../upload/raw/{device_name}.archive.yaml#data"
348+
}
349+
else:
350+
instrument = deepcopy(template_sensor)
351+
instrument["section"]["quantities"]["sensors_list"]["type"] = f"../upload/raw/{device_name}.archive.yaml#Sensors_list"
352+
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
353+
{nomad_name: instrument}
354+
)
355+
data["instrumentation"][nomad_name] = {
356+
"sensors_list": f"../upload/raw/{device_name}.archive.yaml#data"
357+
}
358+
359+
nomad_dict.update({"data": data})
360+
with open(f"{self.directory}/multilog_eln.archive.yaml", "w", encoding="utf-8") as f:
361+
yaml.safe_dump(nomad_dict, f, sort_keys=False)
362+
363+
303364
def write_metadata(self):
304365
"""Write a csv file with information about multilog version,
305366
python version and operating system.

multilog/nomad/archive_template_Camera.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# NOMAD template for optical camera, based on
2+
# https://github.com/FAIRmat-NFDI/AreaA-data_modeling_and_schemas/blob/main/melt_czochralski_Dadzis/IRcameras.archive.yaml
3+
14
definitions:
25
name: 'Optical camera data'
36
sections:

0 commit comments

Comments
 (0)