Skip to content

Commit

Permalink
Merge pull request #26 from nemocrys/dev-nomdad
Browse files Browse the repository at this point in the history
Nomad: add parent ELN file
  • Loading branch information
arvedes authored Nov 16, 2022
2 parents 5feabb9 + e721842 commit 0ac8a72
Show file tree
Hide file tree
Showing 13 changed files with 275 additions and 22 deletions.
4 changes: 2 additions & 2 deletions multilog/devices/basler_camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ def init_output(self, directory="./"):
f.write("time_abs,time_rel,img-name,\n")
with open(f"{self.directory}/device.txt", "w", encoding="utf-8") as f:
f.write(self.device_name)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/daq6510.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,15 @@ def init_output(self, directory="./"):
with open(self.filename, "w", encoding="utf-8") as f:
f.write(units)
f.write(header)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/eurotherm.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,15 @@ def init_output(self, directory="./"):
with open(self.filename, "w", encoding="utf-8") as f:
f.write(units)
f.write(header)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/ifm_flowmeter.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,15 +167,15 @@ def init_output(self, directory="./"):
with open(self.filename, "w", encoding="utf-8") as f:
f.write(units)
f.write(header)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
4 changes: 2 additions & 2 deletions multilog/devices/optris_ip640.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,9 @@ def init_output(self, directory="./"):
with open(f"{self.directory}/_images.csv", "w", encoding="utf-8") as f:
f.write("# datetime,s,filename,\n")
f.write("time_abs,time_rel,img-name,\n")
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/process_condition_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,15 @@ def init_output(self, directory="./"):
f"- {condition}: {self.meas_data[condition]} {self.condition_units[condition]}\n"
)
f.write("\n## Process condition log\n\n")
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/pyrometer_array_lumasense.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,15 @@ def init_output(self, directory="./"):
with open(self.filename, "w", encoding="utf-8") as f:
f.write(units)
f.write(header)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
6 changes: 3 additions & 3 deletions multilog/devices/pyrometer_lumasense.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,15 +149,15 @@ def init_output(self, directory="./"):
with open(self.filename, "w", encoding="utf-8") as f:
f.write(units)
f.write(header)
self.write_nomad_files(directory)
self.write_nomad_file(directory)

def write_nomad_files(self, directory="./"):
def write_nomad_file(self, directory="./"):
"""Write .archive.yaml file based on device configuration.
Args:
directory (str, optional): Output directory. Defaults to "./".
"""
with open("./multilog/nomad/archive_template.yml") as f:
with open("./multilog/nomad/archive_template_sensor.yml") as f:
nomad_template = yaml.safe_load(f)
definitions = nomad_template.pop("definitions")
data = nomad_template.pop("data")
Expand Down
61 changes: 61 additions & 0 deletions multilog/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""This module contains the controller-part of multilog. It sets up the
communication between device and visualization and manages the sampling
loop."""
from copy import deepcopy
import shutil
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QTimer, QThread, QObject, pyqtSignal
Expand Down Expand Up @@ -293,13 +294,73 @@ def init_output_files(self):
break
for device in self.devices:
self.devices[device].init_output(self.directory)
self.write_nomad_file()
self.write_metadata()
shutil.copy(
"./multilog/nomad/base_classes.schema.archive.yaml",
f"{self.directory}/base_classes.schema.archive.yaml",
)
self.main_window.set_output_directory(self.directory)

def write_nomad_file(self):
"""Write main multilog.archive.yaml including an overview of all devices."""
with open("./multilog/nomad/archive_template_main.yml") as f:
nomad_dict = yaml.safe_load(f)
data = nomad_dict.pop("data")
multilog_version = (
subprocess.check_output(
["git", "describe", "--tags", "--dirty", "--always"]
)
.strip()
.decode("utf-8")
)
data["process"]["start_time"] = datetime.datetime.now(datetime.timezone.utc).astimezone().isoformat(timespec='milliseconds').replace('T', ' ')
data["data_processing"].update(
{
"software": f"multilog {multilog_version}",
"sampling_time": self.config["settings"]["dt-main"],
"image_time": self.config["settings"]["dt-camera"],
}
)

template_ir_cam = nomad_dict.pop("instrumentation_IR-camera_template")
template_camera = nomad_dict.pop("instrumentation_camera_template")
template_sensor = nomad_dict.pop("instrumentation_sensors_template")
for device_name in self.devices:
nomad_name = device_name.replace(" ", "_").replace("-", "_")
if "Optris-IP-640" in device_name:
instrument = deepcopy(template_ir_cam)
instrument["section"]["quantities"]["ir_camera"]["type"] = f"../upload/raw/{device_name}.archive.yaml#IR_camera"
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
{nomad_name: instrument}
)
data["instrumentation"][nomad_name] = {
"ir_camera": f"../upload/raw/{device_name}.archive.yaml#data"
}
elif "Basler" in device_name:
instrument = deepcopy(template_camera)
instrument["section"]["quantities"]["camera"]["type"] = f"../upload/raw/{device_name}.archive.yaml#camera"
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
{nomad_name: instrument}
)
data["instrumentation"][nomad_name] = {
"camera": f"../upload/raw/{device_name}.archive.yaml#data"
}
else:
instrument = deepcopy(template_sensor)
instrument["section"]["quantities"]["sensors_list"]["type"] = f"../upload/raw/{device_name}.archive.yaml#Sensors_list"
nomad_dict["definitions"]["sections"]["MeltCzochralski"]["sub_sections"]["instrumentation"]["section"]["sub_sections"].update(
{nomad_name: instrument}
)
data["instrumentation"][nomad_name] = {
"sensors_list": f"../upload/raw/{device_name}.archive.yaml#data"
}

nomad_dict.update({"data": data})
with open(f"{self.directory}/multilog_eln.archive.yaml", "w", encoding="utf-8") as f:
yaml.safe_dump(nomad_dict, f, sort_keys=False)


def write_metadata(self):
"""Write a csv file with information about multilog version,
python version and operating system.
Expand Down
3 changes: 3 additions & 0 deletions multilog/nomad/archive_template_Camera.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# NOMAD template for optical camera, based on
# https://github.com/FAIRmat-NFDI/AreaA-data_modeling_and_schemas/blob/main/melt_czochralski_Dadzis/IRcameras.archive.yaml

definitions:
name: 'Optical camera data'
sections:
Expand Down
3 changes: 3 additions & 0 deletions multilog/nomad/archive_template_IR-Camera.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# NOMAD template for IR camera, based on
# https://github.com/FAIRmat-NFDI/AreaA-data_modeling_and_schemas/blob/main/melt_czochralski_Dadzis/IRcameras.archive.yaml

definitions:
name: 'IR camera data'
sections:
Expand Down
Loading

0 comments on commit 0ac8a72

Please sign in to comment.