From f63eaab4949335484c20386316b140f85220846e Mon Sep 17 00:00:00 2001
From: Florian Dobener <florian.dobener@physik.hu-berlin.de>
Date: Mon, 27 May 2024 16:34:07 +0000
Subject: [PATCH] Fixes problematic nexus and pynxtools merges

---
 Dockerfile                                    |  11 -
 gui/tests/artifacts.js                        | 302 ++--------
 .../metainfo/eln/nexus_data_converter.py      |   6 +-
 nomad/metainfo/elasticsearch_extension.py     |  50 +-
 nomad/metainfo/metainfo.py                    |  18 +-
 nomad/metainfo/nexus.py                       |  51 +-
 nomad/normalizing/metainfo.py                 |   2 +-
 nomad/parsing/nexus/nexus.py                  |  74 ++-
 pyproject.toml                                |   4 +-
 requirements-dev.txt                          | 552 ++++++++++--------
 requirements.txt                              | 232 +++++---
 scripts/check_python_dependencies.sh          |   3 +
 scripts/setup_dev_env.sh                      |   1 -
 tests/data/parsers/nexus/SiO2onSi.ellips.nxs  | Bin 92888 -> 195352 bytes
 14 files changed, 622 insertions(+), 684 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 7084a7029a..670321e788 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -126,9 +126,6 @@ ARG SETUPTOOLS_SCM_PRETEND_VERSION='0.0'
 
 # Build documentation
 
-# This is a temporary workaround because atomisticparsers installs an older version
-# of nomad-lab via pip install git+...still containing pynxtools as a submodule
-RUN pip uninstall -y pynxtools
 RUN pip install ".[parsing,infrastructure,dev]"
 
 RUN ./scripts/generate_docs_artifacts.sh \
@@ -174,14 +171,6 @@ RUN pip install --progress-bar off --prefer-binary -r requirements.txt
 # install
 COPY --from=dev_python /app/dist/nomad-lab-*.tar.gz .
 RUN pip install nomad-lab-*.tar.gz
-# This is a temporary workaround because atomisticparsers installs an older version
-# of nomad-lab via pip install git+...still containing pynxtools as a submodule.
-RUN pip uninstall -y pynxtools
-RUN pip install pynxtools[convert]
-# This is a temporary workaround because pynxtools installs an incompatible
-# version of h5grove
-RUN pip uninstall -y h5grove
-RUN pip install h5grove[fastapi]==1.3.0
 
 # Reduce the size of the packages
 RUN find /usr/local/lib/python3.9/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \
diff --git a/gui/tests/artifacts.js b/gui/tests/artifacts.js
index bd59789aa0..5ec6ea6e0c 100644
--- a/gui/tests/artifacts.js
+++ b/gui/tests/artifacts.js
@@ -39983,18 +39983,14 @@ window.nomadArtifacts = {
                   "type_data": [
                     "apm",
                     "ellips",
-                    "em_nion",
-                    "em_om",
-                    "em_spctrscpy",
+                    "em",
                     "example",
-                    "hall",
                     "json_map",
                     "json_yml",
                     "mpes",
+                    "srd",
                     "sts",
-                    "transmission",
-                    "xps",
-                    "xrd"
+                    "xps"
                   ]
                 }
               },
@@ -40014,23 +40010,65 @@ window.nomadArtifacts = {
                 "type": {
                   "type_kind": "Enum",
                   "type_data": [
+                    "NXapm",
+                    "NXapm_composition_space_results",
+                    "NXapm_compositionspace_config",
+                    "NXapm_compositionspace_results",
+                    "NXapm_paraprobe_clusterer_config",
+                    "NXapm_paraprobe_clusterer_results",
+                    "NXapm_paraprobe_distancer_config",
+                    "NXapm_paraprobe_distancer_results",
+                    "NXapm_paraprobe_intersector_config",
+                    "NXapm_paraprobe_intersector_results",
+                    "NXapm_paraprobe_nanochem_config",
+                    "NXapm_paraprobe_nanochem_results",
+                    "NXapm_paraprobe_ranger_config",
+                    "NXapm_paraprobe_ranger_results",
+                    "NXapm_paraprobe_selector_config",
+                    "NXapm_paraprobe_selector_results",
+                    "NXapm_paraprobe_spatstat_config",
+                    "NXapm_paraprobe_spatstat_results",
+                    "NXapm_paraprobe_surfacer_config",
+                    "NXapm_paraprobe_surfacer_results",
+                    "NXapm_paraprobe_tessellator_config",
+                    "NXapm_paraprobe_tessellator_results",
+                    "NXapm_paraprobe_transcoder_config",
+                    "NXapm_paraprobe_transcoder_results",
                     "NXarchive",
                     "NXarpes",
                     "NXcanSAS",
+                    "NXcxi_ptycho",
                     "NXdirecttof",
+                    "NXdispersive_material",
+                    "NXellipsometry",
+                    "NXem",
                     "NXfluo",
                     "NXindirecttof",
                     "NXiqproc",
+                    "NXiv_temp",
+                    "NXlab_electro_chemo_mechanical_preparation",
+                    "NXlab_sample_mounting",
                     "NXlauetof",
                     "NXmonopd",
+                    "NXmpes",
+                    "NXms",
+                    "NXms_score_config",
+                    "NXms_score_results",
                     "NXmx",
+                    "NXopt",
+                    "NXraman",
                     "NXrefscan",
                     "NXreftof",
+                    "NXroot",
                     "NXsas",
                     "NXsastof",
                     "NXscan",
+                    "NXsensor_scan",
+                    "NXsnsevent",
+                    "NXsnshisto",
                     "NXspe",
                     "NXsqom",
+                    "NXsts",
                     "NXstxm",
                     "NXtas",
                     "NXtofnpd",
@@ -40039,6 +40077,7 @@ window.nomadArtifacts = {
                     "NXtomo",
                     "NXtomophase",
                     "NXtomoproc",
+                    "NXtransmission",
                     "NXxas",
                     "NXxasproc",
                     "NXxbase",
@@ -40047,215 +40086,9 @@ window.nomadArtifacts = {
                     "NXxlaue",
                     "NXxlaueplate",
                     "NXxnb",
-                    "NXxrot",
-                    "NXaberration",
-                    "NXaberration_model",
-                    "NXaberration_model_ceos",
-                    "NXaberration_model_nion",
-                    "NXactivity",
-                    "NXactuator",
-                    "NXadc",
-                    "NXamplifier",
-                    "NXaperture_em",
-                    "NXapm",
-                    "NXapm_composition_space_results",
-                    "NXapm_input_ranging",
-                    "NXapm_input_reconstruction",
-                    "NXapm_paraprobe_config_clusterer",
-                    "NXapm_paraprobe_config_distancer",
-                    "NXapm_paraprobe_config_intersector",
-                    "NXapm_paraprobe_config_nanochem",
-                    "NXapm_paraprobe_config_ranger",
-                    "NXapm_paraprobe_config_selector",
-                    "NXapm_paraprobe_config_spatstat",
-                    "NXapm_paraprobe_config_surfacer",
-                    "NXapm_paraprobe_config_tessellator",
-                    "NXapm_paraprobe_config_transcoder",
-                    "NXapm_paraprobe_results_clusterer",
-                    "NXapm_paraprobe_results_distancer",
-                    "NXapm_paraprobe_results_intersector",
-                    "NXapm_paraprobe_results_nanochem",
-                    "NXapm_paraprobe_results_ranger",
-                    "NXapm_paraprobe_results_selector",
-                    "NXapm_paraprobe_results_spatstat",
-                    "NXapm_paraprobe_results_surfacer",
-                    "NXapm_paraprobe_results_tessellator",
-                    "NXapm_paraprobe_results_transcoder",
-                    "NXbeam_path",
-                    "NXbeam_splitter",
-                    "NXbias_spectroscopy",
-                    "NXcalibration",
-                    "NXcg_alpha_complex",
-                    "NXcg_cylinder_set",
-                    "NXcg_ellipsoid_set",
-                    "NXcg_face_list_data_structure",
-                    "NXcg_geodesic_mesh",
-                    "NXcg_grid",
-                    "NXcg_half_edge_data_structure",
-                    "NXcg_hexahedron_set",
-                    "NXcg_marching_cubes",
-                    "NXcg_parallelogram_set",
-                    "NXcg_point_set",
-                    "NXcg_polygon_set",
-                    "NXcg_polyhedron_set",
-                    "NXcg_polyline_set",
-                    "NXcg_primitive_set",
-                    "NXcg_roi_set",
-                    "NXcg_sphere_set",
-                    "NXcg_tetrahedron_set",
-                    "NXcg_triangle_set",
-                    "NXcg_triangulated_surface_mesh",
-                    "NXcg_unit_normal_set",
-                    "NXchamber",
-                    "NXchemical_composition",
-                    "NXchemical_process",
-                    "NXcircuit",
-                    "NXcircuit_board",
-                    "NXclustering",
-                    "NXcollectioncolumn",
-                    "NXcomponent_em",
-                    "NXcontainer",
-                    "NXcoordinate_system",
-                    "NXcoordinate_system_set",
-                    "NXcorrector_cs",
-                    "NXcrystal_structure",
-                    "NXcs_computer",
-                    "NXcs_cpu",
-                    "NXcs_cpu_obj",
-                    "NXcs_cpu_sys",
-                    "NXcs_filter_boolean_mask",
-                    "NXcs_gpu",
-                    "NXcs_gpu_obj",
-                    "NXcs_gpu_sys",
-                    "NXcs_io_obj",
-                    "NXcs_io_sys",
-                    "NXcs_mm_obj",
-                    "NXcs_mm_sys",
-                    "NXcs_prng",
-                    "NXcs_profiling",
-                    "NXcs_profiling_event",
-                    "NXcsg",
-                    "NXcxi_ptycho",
-                    "NXdac",
-                    "NXdata_mpes",
-                    "NXdata_mpes_detector",
-                    "NXdeflector",
-                    "NXdelocalization",
-                    "NXdispersion",
-                    "NXdispersion_function",
-                    "NXdispersion_repeated_parameter",
-                    "NXdispersion_single_parameter",
-                    "NXdispersion_table",
-                    "NXdispersive_material",
-                    "NXdistortion",
-                    "NXebeam_column",
-                    "NXelectron_level",
-                    "NXelectronanalyser",
-                    "NXelectrostatic_kicker",
-                    "NXellipsometry",
-                    "NXem",
-                    "NXem_adf",
-                    "NXem_base",
-                    "NXem_conventions",
-                    "NXem_conventions_ebsd",
-                    "NXem_correlation",
-                    "NXem_ebsd",
-                    "NXem_eds",
-                    "NXem_eels",
-                    "NXem_img",
-                    "NXem_method",
-                    "NXem_msr",
-                    "NXem_sim",
-                    "NXenergydispersion",
-                    "NXevent_data_em",
-                    "NXevent_data_em_set",
-                    "NXfabrication",
-                    "NXfiber",
-                    "NXgraph_edge_set",
-                    "NXgraph_node_set",
-                    "NXgraph_root",
-                    "NXibeam_column",
-                    "NXidentifier",
-                    "NXimage_c_set",
-                    "NXimage_r_set",
-                    "NXimage_r_set_diff",
-                    "NXimage_set",
-                    "NXinteraction_vol_em",
-                    "NXion",
-                    "NXisocontour",
-                    "NXiv_bias",
-                    "NXiv_temp",
-                    "NXlab_electro_chemo_mechanical_preparation",
-                    "NXlab_sample_mounting",
-                    "NXlens_em",
-                    "NXlens_opt",
-                    "NXlockin",
-                    "NXmagnetic_kicker",
-                    "NXmanipulator",
-                    "NXmatch_filter",
-                    "NXmpes",
-                    "NXms",
-                    "NXms_feature_set",
-                    "NXms_ipf",
-                    "NXms_ipf_set",
-                    "NXms_mtex_config",
-                    "NXms_odf",
-                    "NXms_odf_set",
-                    "NXms_pf",
-                    "NXms_pf_set",
-                    "NXms_recon",
-                    "NXms_score_config",
-                    "NXms_score_results",
-                    "NXms_snapshot",
-                    "NXms_snapshot_set",
-                    "NXopt",
-                    "NXoptical_system_em",
-                    "NXpeak",
-                    "NXphysical_process",
-                    "NXpid",
-                    "NXpolarizer_opt",
-                    "NXpositioner_sts",
-                    "NXprocess_mpes",
-                    "NXprogram",
-                    "NXpulser_apm",
-                    "NXpump",
-                    "NXquadric",
-                    "NXquadrupole_magnet",
-                    "NXreflectron",
-                    "NXregion",
-                    "NXregistration",
-                    "NXresolution",
-                    "NXroi",
-                    "NXrotation_set",
-                    "NXsample_component_set",
-                    "NXsample_history",
-                    "NXscanbox_em",
-                    "NXsensor_scan",
-                    "NXsensor_sts",
-                    "NXseparator",
-                    "NXserialized",
-                    "NXsimilarity_grouping",
-                    "NXsingle_crystal",
-                    "NXslip_system_set",
-                    "NXsnsevent",
-                    "NXsnshisto",
-                    "NXsolenoid_magnet",
-                    "NXsolid_geometry",
-                    "NXspatial_filter",
-                    "NXspectrum_set",
-                    "NXspin_rotator",
-                    "NXspindispersion",
-                    "NXstage_lab",
-                    "NXsts",
-                    "NXsubsampling_filter",
-                    "NXsubstance",
-                    "NXtransmission",
-                    "NXunit_cell",
-                    "NXwaveplate",
                     "NXxpcs",
-                    "NXxrd",
                     "NXxrd_pan",
-                    "NXroot"
+                    "NXxrot"
                   ]
                 }
               },
@@ -102868,47 +102701,6 @@ window.nomadArtifacts = {
           ]
         }
       },
-      {
-        "authors": [
-          "Sbail\u00f2, Luigi",
-          "Scheffler, Matthias",
-          "Ghiringhelli, Luca M."
-        ],
-        "email": "ghiringhelli@fhi-berlin.mpg.de",
-        "title": "Querying the NOMAD Archive and performing artificial-intelligence modeling",
-        "description": "In this tutorial, we demonstrate how to query the NOMAD Archive from the NOMAD Analytics toolkit. We then show examples of machine learning analysis performed on the retrieved data set.",
-        "notebook_name": "query_nomad_archive.ipynb",
-        "url": "https://gitlab.mpcdf.mpg.de/nomad-lab/analytics-query-nomad-archive",
-        "link": "https://analytics-toolkit.nomad-coe.eu/hub/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb",
-        "link_public": "https://analytics-toolkit.nomad-coe.eu/public/user-redirect/notebooks/tutorials/query_nomad_archive.ipynb",
-        "updated": "2022-04-06",
-        "flags": {
-          "featured": true,
-          "top_of_list": false
-        },
-        "labels": {
-          "application_section": [
-            "Analysing the content of the Archive"
-          ],
-          "application_system": [
-            "Ternaries"
-          ],
-          "category": [
-            "query_tutorial"
-          ],
-          "ai_methods": [
-            "Unsupervised learning",
-            "Supervised learning",
-            "Regression",
-            "Clustering",
-            "Dimension reduction",
-            "Random forest"
-          ],
-          "platform": [
-            "jupyter"
-          ]
-        }
-      },
       {
         "authors": [
           "Langer, Marcel F."
diff --git a/nomad/datamodel/metainfo/eln/nexus_data_converter.py b/nomad/datamodel/metainfo/eln/nexus_data_converter.py
index c3207ec08b..0448da52e1 100644
--- a/nomad/datamodel/metainfo/eln/nexus_data_converter.py
+++ b/nomad/datamodel/metainfo/eln/nexus_data_converter.py
@@ -10,7 +10,9 @@ try:
     from pynxtools.dataconverter import convert as pynxtools_converter
     from pynxtools.dataconverter import writer as pynxtools_writer
     from pynxtools.dataconverter.template import Template
-    from pynxtools.nexus.nexus import get_app_defs_names  # pylint: disable=import-error
+    from pynxtools.definitions.dev_tools.utils.nxdl_utils import (
+        get_app_defs_names,  # pylint: disable=import-error
+    )
 except ImportError:
     NEXUS_AVAILABLE = False
     pass
@@ -172,7 +174,7 @@ class NexusDataConverter(EntryData):
     )
 
     nxdl = Quantity(
-        type=MEnum(get_app_defs_names() if NEXUS_AVAILABLE else []),
+        type=MEnum(sorted(list(set(get_app_defs_names()))) if NEXUS_AVAILABLE else []),
         description='The nxdl needed for running the Nexus converter.',
         a_eln=dict(component='AutocompleteEditQuantity'),
     )
diff --git a/nomad/metainfo/elasticsearch_extension.py b/nomad/metainfo/elasticsearch_extension.py
index 4fe00726f5..6deac6fcb3 100644
--- a/nomad/metainfo/elasticsearch_extension.py
+++ b/nomad/metainfo/elasticsearch_extension.py
@@ -157,23 +157,25 @@ sub-sections as if they were direct sub-sections.
 """
 
 import math
+import re
+from collections import defaultdict
 from typing import (
-    Union,
+    TYPE_CHECKING,
     Any,
+    Callable,
+    DefaultDict,
     Dict,
-    cast,
-    Set,
     List,
-    Callable,
-    Tuple,
     Optional,
-    DefaultDict,
+    Set,
+    Tuple,
+    Union,
+    cast,
 )
-from collections import defaultdict
+
 import numpy as np
-from pint import Quantity as PintQuantity
-import re
 from elasticsearch_dsl import Q
+from pint import Quantity as PintQuantity
 
 from nomad import utils
 from nomad.config import config
@@ -181,24 +183,22 @@ from nomad.config.models.plugins import Schema, Parser, SchemaPackageEntryPoint
 from nomad.metainfo.util import MTypes
 
 from .metainfo import (
-    MSectionBound,
-    Section,
-    Quantity,
-    MSection,
-    MEnum,
     Datetime,
-    Reference,
-    DefinitionAnnotation,
     Definition,
+    DefinitionAnnotation,
+    MEnum,
+    MSection,
+    MSectionBound,
+    Package,
+    Quantity,
     QuantityReference,
+    Reference,
+    Section,
     Unit,
-    Package,
 )
 
-from typing import TYPE_CHECKING
-
 if TYPE_CHECKING:
-    from nomad.datamodel.datamodel import SearchableQuantity, EntryArchive
+    from nomad.datamodel.datamodel import EntryArchive, SearchableQuantity
 
 schema_separator = '#'
 dtype_separator = '#'
@@ -1603,17 +1603,25 @@ def create_searchable_quantity(
             value_field_name = get_searchable_quantity_value_field(annotation)
             if value_field_name is None:
                 return None
+
             if mapping == 'text':
                 value = str(value)
             elif mapping == 'date':
                 value = Datetime.serialize(section, quantity_def, value)
             elif mapping == 'long':
-                value = int(value)
+                if isinstance(value, PintQuantity):
+                    value = int(value.m)
+                elif isinstance(value, dict):
+                    return None
+                else:
+                    value = int(value)
             elif mapping == 'boolean':
                 value = bool(value)
             elif mapping == 'double':
                 if isinstance(value, PintQuantity):
                     value = float(value.m)
+                elif isinstance(value, dict):
+                    return None
                 else:
                     value = float(value)
                 if math.isnan(value):
diff --git a/nomad/metainfo/metainfo.py b/nomad/metainfo/metainfo.py
index ae8bcd2bd1..4fb7155e29 100644
--- a/nomad/metainfo/metainfo.py
+++ b/nomad/metainfo/metainfo.py
@@ -18,7 +18,6 @@
 from __future__ import annotations
 
 import base64
-from copy import deepcopy
 import importlib
 import inspect
 import itertools
@@ -26,11 +25,13 @@ import json
 import re
 import sys
 from collections.abc import Iterable as IterableABC
+from copy import deepcopy
 from functools import reduce
 from typing import (
     Any,
-    Callable as TypingCallable,
+    ClassVar,
     Dict,
+    Generator,
     Iterable,
     List,
     Optional,
@@ -39,9 +40,10 @@ from typing import (
     Type,
     TypeVar,
     Union,
-    Generator,
     cast,
-    ClassVar,
+)
+from typing import (
+    Callable as TypingCallable,
 )
 
 import docstring_parser
@@ -49,7 +51,7 @@ import jmespath
 import numpy as np
 import pandas as pd
 import pint
-from pydantic import parse_obj_as, ValidationError, BaseModel, Field
+from pydantic import BaseModel, Field, ValidationError, parse_obj_as
 
 from nomad.config import config
 from nomad.metainfo.util import (
@@ -1946,6 +1948,12 @@ class MSection(
             if dimension == 0:
                 attr_value = self.__set_normalize(tgt_attr, attr_value)
             elif dimension == 1:
+                if isinstance(tgt_attr.shape[0], str) and (
+                    not isinstance(attr_value, IterableABC)
+                    or isinstance(attr_value, str)
+                ):
+                    if tgt_attr.shape[0].startswith('0') or '*' in tgt_attr.shape[0]:
+                        attr_value = [attr_value]
                 if isinstance(attr_value, str) or not isinstance(
                     attr_value, IterableABC
                 ):
diff --git a/nomad/metainfo/nexus.py b/nomad/metainfo/nexus.py
index 80b9f03664..e9192c837e 100644
--- a/nomad/metainfo/nexus.py
+++ b/nomad/metainfo/nexus.py
@@ -23,7 +23,7 @@ import sys
 
 # noinspection PyPep8Naming
 import xml.etree.ElementTree as ET
-from typing import Dict, List, Optional, Set, Union
+from typing import Dict, List, Optional, Union
 
 import numpy as np
 
@@ -41,7 +41,6 @@ from nomad.metainfo import (
     Definition,
     MEnum,
     Package,
-    Property,
     Quantity,
     Section,
     SubSection,
@@ -81,6 +80,18 @@ __NX_TYPES = {  # Primitive Types,  'ISO8601' is the only type not defined here
     'NX_BINARY': Bytes,
     'NX_DATE_TIME': Datetime,
 }
+__NX_ATTR_TYPES = {
+    'NX_COMPLEX': float,
+    'NX_FLOAT': float,
+    'NX_CHAR': str,
+    'NX_BOOLEAN': bool,
+    'NX_INT': int,
+    'NX_UINT': int,
+    'NX_NUMBER': float,
+    'NX_POSINT': int,
+    'NX_BINARY': Bytes,
+    'NX_DATE_TIME': Datetime,
+}
 
 
 class NXUnitSet:
@@ -225,7 +236,7 @@ def __to_section(name: str, **kwargs) -> Section:
     """
     Returns the 'existing' metainfo section for a given top-level nexus base-class name.
 
-    This function ensures that sections for these base-classes are only created one.
+    This function ensures that sections for these base-classes are only created once.
     This allows to access the metainfo section even before it is generated from the base
     class nexus definition.
     """
@@ -314,7 +325,7 @@ def __create_attributes(xml_node: ET.Element, definition: Union[Section, Quantit
             nx_type = nx_enum
             nx_shape: List[str] = []
         else:
-            nx_type = __NX_TYPES[attribute.get('type', 'NX_CHAR')]  # type: ignore
+            nx_type = __NX_ATTR_TYPES[attribute.get('type', 'NX_CHAR')]  # type: ignore
             has_bound = False
             has_bound |= 'minOccurs' in attribute.attrib
             has_bound |= 'maxOccurs' in attribute.attrib
@@ -325,7 +336,8 @@ def __create_attributes(xml_node: ET.Element, definition: Union[Section, Quantit
                     nx_max_occurs = '*'
                 nx_shape = [f'{nx_min_occurs}..{nx_max_occurs}']
             else:
-                nx_shape = []
+                # Default is to allow any shape
+                nx_shape = ['0..*']
 
         m_attribute = Attribute(
             name=name, variable=__if_template(name), shape=nx_shape, type=nx_type
@@ -340,7 +352,7 @@ def __create_attributes(xml_node: ET.Element, definition: Union[Section, Quantit
 
 
 def __add_additional_attributes(definition: Definition):
-    if 'm_nx_data_path' not in definition.all_attributes:
+    if 'm_nx_data_path' not in definition.attributes:
         definition.attributes.append(
             Attribute(
                 name='m_nx_data_path',
@@ -352,7 +364,7 @@ def __add_additional_attributes(definition: Definition):
             )
         )
 
-    if 'm_nx_data_file' not in definition.all_attributes:
+    if 'm_nx_data_file' not in definition.attributes:
         definition.attributes.append(
             Attribute(
                 name='m_nx_data_file',
@@ -639,7 +651,7 @@ def __add_section_from_nxdl(xml_node: ET.Element) -> Optional[Section]:
         __logger.error(
             'Fail to generate metainfo.',
             target_name=xml_node.attrib['name'],
-            exe_info=str(err),
+            exc_info=str(err),
         )
         return None
 
@@ -732,15 +744,20 @@ def init_nexus_metainfo():
     nexus_metainfo_package.init_metainfo()
 
     # Add additional NOMAD specific attributes (nx_data_path, nx_data_file, nx_mean, ...)
-    sections: Set[Section] = set()
-    quantities: Set[Quantity] = set()
-    for section in __section_definitions.values():
-        sections.add(section.inherited_sections[0])
-        quantities.update(section.all_quantities.values())
-    for definition in sections:
-        __add_additional_attributes(definition)
-    for definition in quantities:
-        __add_additional_attributes(definition)
+    # This needs to be done in the right order, base sections first.
+    visited_definitions = set()
+    sections = list()
+    for definition, _, _, _ in nexus_metainfo_package.m_traverse():
+        if isinstance(definition, Section):
+            for section in reversed([definition] + definition.all_base_sections):
+                if section not in visited_definitions:
+                    visited_definitions.add(section)
+                    sections.append(section)
+
+    for section in sections:
+        __add_additional_attributes(section)
+        for quantity in section.quantities:
+            __add_additional_attributes(quantity)
 
     # We skip the Python code generation for now and offer Python classes as variables
     # TO DO not necessary right now, could also be done case-by-case by the nexus parser
diff --git a/nomad/normalizing/metainfo.py b/nomad/normalizing/metainfo.py
index 81fdf44b1f..4ab8107ccf 100644
--- a/nomad/normalizing/metainfo.py
+++ b/nomad/normalizing/metainfo.py
@@ -33,7 +33,7 @@ class MetainfoNormalizer(Normalizer):
         except Exception:
             pass
 
-        if normalize:
+        if normalize and callable(normalize):
             try:
                 normalize(archive, logger)
             except Exception as e:
diff --git a/nomad/parsing/nexus/nexus.py b/nomad/parsing/nexus/nexus.py
index 759c263999..81f116d89f 100644
--- a/nomad/parsing/nexus/nexus.py
+++ b/nomad/parsing/nexus/nexus.py
@@ -16,9 +16,9 @@
 # limitations under the License.
 #
 
-import xml.etree.ElementTree as ET
 from typing import Optional, Set
 
+import lxml.etree as ET
 import numpy as np
 
 try:
@@ -138,7 +138,7 @@ class NexusParser(Parser):
             self._sample_class_refs[key] = []
 
     def _collect_class(self, current: MSection):
-        class_name = current.m_def.name
+        class_name = current.m_def.more.get('nx_type')
         if (
             class_name in self._sample_class_refs
             and current not in self._sample_class_refs[class_name]
@@ -151,9 +151,6 @@ class NexusParser(Parser):
         """
         Populate attributes and fields
         """
-        if not self.nxs_fname and hdf_node:
-            self.nxs_fname = hdf_node.file.filename.split('/')[-1]
-
         if depth < len(nx_path):
             # it is an attribute of either field or group
             nx_attr = nx_path[depth]
@@ -176,7 +173,7 @@ class NexusParser(Parser):
                 attr_value = hdf_node.attrs[attr_name]
                 if not isinstance(attr_value, str):
                     if isinstance(attr_value, np.ndarray):
-                        attr_value = [value for value in attr_value]
+                        attr_value = attr_value.tolist()
                         if len(attr_value) == 1:
                             attr_value = attr_value[0]
 
@@ -188,17 +185,29 @@ class NexusParser(Parser):
                         current.m_set_section_attribute(attr_name, attr_value)
                     else:
                         parent_html_name = nx_path[-2].get('name')
+
                         parent_instance_name = hdf_node.name.split('/')[-1] + '__field'
                         parent_field_name = parent_html_name + '__field'
-                        metainfo_def = resolve_variadic_name(
-                            current.m_def.all_properties, parent_field_name
-                        )
+
+                        metainfo_def = None
+                        try:
+                            metainfo_def = resolve_variadic_name(
+                                current.m_def.all_properties, parent_field_name
+                            )
+                        except ValueError as exc:
+                            self._logger.warning(
+                                f'{current.m_def} has no suitable property for {parent_field_name}',
+                                target_name=attr_name,
+                                exc_info=exc,
+                            )
+
                         if parent_field_name in current.__dict__:
                             quantity = current.__dict__[parent_field_name]
                             if isinstance(quantity, dict):
                                 quantity = quantity[parent_instance_name]
                         else:
                             quantity = None
+
                         current.m_set_quantity_attribute(
                             metainfo_def, attr_name, attr_value, quantity=quantity
                         )
@@ -206,7 +215,7 @@ class NexusParser(Parser):
                     self._logger.warning(
                         'Error while setting attribute.',
                         target_name=attr_name,
-                        exe_info=str(e),
+                        exc_info=e,
                     )
         else:
             # it is a field
@@ -233,12 +242,6 @@ class NexusParser(Parser):
                         ]
                     )
                     field = field_stats[0]
-                if np.isnan(field):
-                    self._logger.warning(
-                        'NaN value is not set for field ',
-                        target_name=field_name + '[' + data_instance_name + ']',
-                    )
-                    return
 
             # check if unit is given
             unit = hdf_node.attrs.get('units', None)
@@ -287,7 +290,7 @@ class NexusParser(Parser):
                 self._logger.warning(
                     'Error while setting field.',
                     target_name=field_name,
-                    exe_info=str(e),
+                    exc_info=e,
                 )
 
     def __nexus_populate(self, params: dict, attr=None):  # pylint: disable=W0613
@@ -303,9 +306,6 @@ class NexusParser(Parser):
         hdf_path: str = hdf_info['hdf_path']
         hdf_node = hdf_info['hdf_node']
 
-        if not self.nxs_fname and hdf_node:
-            self.nxs_fname = hdf_node.file.filename.split('/')[-1]
-
         if nx_path is None:
             return
 
@@ -317,12 +317,12 @@ class NexusParser(Parser):
             current = _to_section(name, nx_def, nx_node, current)
             self._collect_class(current)
             depth += 1
-            current_hdf_path = current_hdf_path + (
-                '/' + name if depth < len(nx_path) else ''
-            )
-            current.m_set_section_attribute('m_nx_data_path', current_hdf_path)
-
-            current.m_set_section_attribute('m_nx_data_file', self.nxs_fname)
+            if depth < len(nx_path):
+                current_hdf_path = current_hdf_path + ('/' + name)
+            if nx_node is not None and isinstance(nx_node, ET._Element):
+                if nx_node.tag.endswith('group'):
+                    current.m_set_section_attribute('m_nx_data_path', current_hdf_path)
+                    current.m_set_section_attribute('m_nx_data_file', self.nxs_fname)
         self._populate_data(depth, nx_path, nx_def, hdf_node, current)
 
     def get_sub_element_names(self, elem: MSection):
@@ -362,15 +362,18 @@ class NexusParser(Parser):
 
         for sample in self._sample_class_refs['NXsample']:
             if sample.get('atom_types__field') is not None:
-                if isinstance(sample.atom_types__field, list):
-                    atomlist = sample.atom_types__field
+                atom_types = sample.atom_types__field['atom_types__field'].value
+                if isinstance(atom_types, list):
+                    atomlist = atom_types
                 else:
-                    atomlist = sample.atom_types__field.replace(' ', '').split(',')
+                    atomlist = atom_types.replace(' ', '').split(',')
                 # Caution: The element list will be overwritten
                 # in case a single chemical formula is found
                 material.elements = list(set(material.elements) | set(atomlist))
             if sample.get('chemical_formula__field') is not None:
-                chemical_formulas.add(sample.chemical_formula__field)
+                chemical_formulas.add(
+                    sample.chemical_formula__field['chemical_formula__field'].value
+                )
 
         for class_ref in (
             'NXsample_component',
@@ -378,11 +381,17 @@ class NexusParser(Parser):
         ):
             for section in self._sample_class_refs[class_ref]:
                 if section.get('chemical_formula__field') is not None:
-                    chemical_formulas.add(section.chemical_formula__field)
+                    chemical_formulas.add(
+                        section.chemical_formula__field['chemical_formula__field'].value
+                    )
 
         for substance in self._sample_class_refs['NXsubstance']:
             if substance.get('molecular_formula_hill__field') is not None:
-                chemical_formulas.add(substance.molecular_formula_hill__field)
+                chemical_formulas.add(
+                    substance.molecular_formula_hill__field[
+                        'molecular_formula_hill__field'
+                    ].value
+                )
 
         return chemical_formulas
 
@@ -427,6 +436,7 @@ class NexusParser(Parser):
         self._clear_class_refs()
 
         if mainfile.endswith('nxs'):
+            *_, self.nxs_fname = mainfile.rsplit('/', 1)
             nexus_helper = read_nexus.HandleNexus(logger, mainfile)
             nexus_helper.process_nexus_master_file(self.__nexus_populate)
         else:
diff --git a/pyproject.toml b/pyproject.toml
index 23571ec71b..ce34cebb61 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -66,10 +66,10 @@ parsing = [
     'h5py==3.11.0',
     'netCDF4==1.6.5',
     'pybis@git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370',
-    'pynxtools[convert]==0.1.1',
+    'pynxtools[convert]==0.3.1',
     'pyzeo==0.1.5',
     'quippy-ase==0.9.14',
-    'rdkit',
+    'rdkit==2023.9.5',
 ]
 infrastructure = [
     'asgiref~=3.5',
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 530b0633fe..ed29159b33 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,148 +1,181 @@
-# This file was autogenerated by uv via the following command:
-#    uv pip compile --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt requirements.txt pyproject.toml
+#
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
+#
+#    pip-compile --annotation-style=line --extra=dev --extra=infrastructure --extra=parsing --output-file=requirements-dev.txt --pip-args='--prefer-binary' pyproject.toml requirements.txt
+#
 aiosmtpd==1.4.6           # via nomad-lab (pyproject.toml)
-alabaster==0.7.16         # via sphinx, -r requirements.txt
-alembic==1.13.1           # via jupyterhub, -r requirements.txt
-amqp==5.2.0               # via kombu, -r requirements.txt
+alabaster==0.7.16         # via -r requirements.txt, sphinx
+alembic==1.13.1           # via -r requirements.txt, jupyterhub
+amqp==5.2.0               # via -r requirements.txt, kombu
 aniso8601==9.0.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
-anyio==4.3.0              # via httpx, starlette, watchfiles, -r requirements.txt
-arrow==1.3.0              # via isoduration, -r requirements.txt
-asciitree==0.3.3          # via zarr, -r requirements.txt
-ase==3.19.3               # via asr, ifes-apt-tc-data-modeling, matid, pynxtools, quippy-ase, -r requirements.txt, nomad-lab (pyproject.toml)
+anyio==4.3.0              # via -r requirements.txt, httpx, jupyter-server, starlette, watchfiles
+anytree==2.12.1           # via -r requirements.txt, pynxtools
+appnope==0.1.4            # via -r requirements.txt, ipykernel
+argon2-cffi==23.1.0       # via -r requirements.txt, jupyter-server
+argon2-cffi-bindings==21.2.0  # via -r requirements.txt, argon2-cffi
+arrow==1.3.0              # via -r requirements.txt, isoduration
+asciitree==0.3.3          # via -r requirements.txt, zarr
+ase==3.19.3               # via -r requirements.txt, asr, ifes-apt-tc-data-modeling, matid, nomad-lab (pyproject.toml), pynxtools, quippy-ase
 asgiref==3.8.1            # via -r requirements.txt, nomad-lab (pyproject.toml)
 asr==0.4.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
-asteval==0.9.32           # via lmfit, -r requirements.txt
+asteval==0.9.33           # via -r requirements.txt, lmfit
 astroid==3.2.2            # via nomad-lab (pyproject.toml)
-asttokens==2.4.1          # via devtools, stack-data, -r requirements.txt
-async-generator==1.10     # via jupyterhub, -r requirements.txt
+asttokens==2.4.1          # via -r requirements.txt, devtools, stack-data
+async-generator==1.10     # via -r requirements.txt, jupyterhub
+async-lru==2.0.4          # via -r requirements.txt, jupyterlab
 atpublic==4.1.0           # via aiosmtpd
-attrs==23.2.0             # via aiosmtpd, jsonschema, pytest, -r requirements.txt
-babel==2.15.0             # via mkdocs-git-revision-date-localized-plugin, mkdocs-material, sphinx, -r requirements.txt
+attrs==23.2.0             # via -r requirements.txt, aiosmtpd, jsonschema, pytest
+babel==2.15.0             # via -r requirements.txt, jupyterlab-server, mkdocs-git-revision-date-localized-plugin, mkdocs-material, sphinx
 backports-tarfile==1.1.1  # via jaraco-context
 bagit==1.8.1              # via -r requirements.txt, nomad-lab (pyproject.toml)
 basicauth==0.4.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
-beautifulsoup4==4.12.3    # via -r requirements.txt, nomad-lab (pyproject.toml)
-billiard==4.2.0           # via celery, -r requirements.txt
-biopython==1.83           # via mdanalysis, -r requirements.txt
+beautifulsoup4==4.12.3    # via -r requirements.txt, nbconvert, nomad-lab (pyproject.toml)
+billiard==4.2.0           # via -r requirements.txt, celery
+biopython==1.83           # via -r requirements.txt, mdanalysis
 bitarray==2.9.2           # via -r requirements.txt, nomad-lab (pyproject.toml)
-blinker==1.8.2            # via flask, -r requirements.txt
-blosc2==2.5.1             # via tables, -r requirements.txt
+bleach==6.1.0             # via -r requirements.txt, nbconvert
+blinker==1.8.2            # via -r requirements.txt, flask
+blosc2==2.5.1             # via -r requirements.txt, tables
 build==1.2.1              # via nomad-lab (pyproject.toml)
 cachetools==5.3.3         # via -r requirements.txt, nomad-lab (pyproject.toml)
 celery==5.4.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
-certifi==2024.2.2         # via elasticsearch, httpcore, httpx, netcdf4, requests, -r requirements.txt
-certipy==0.1.3            # via jupyterhub, -r requirements.txt
-cffi==1.16.0              # via cryptography, -r requirements.txt
-cftime==1.6.3             # via netcdf4, -r requirements.txt
-charset-normalizer==3.3.2  # via requests, -r requirements.txt
-click==8.1.7              # via asr, celery, click-didyoumean, click-plugins, click-repl, dask, flask, mkdocs, mkdocs-click, pynxtools, uvicorn, -r requirements.txt, nomad-lab (pyproject.toml)
-click-didyoumean==0.3.1   # via celery, -r requirements.txt
-click-plugins==1.1.1      # via celery, -r requirements.txt
-click-repl==0.3.0         # via celery, -r requirements.txt
-cloudpickle==3.0.0        # via dask, hyperspy, -r requirements.txt
+certifi==2024.2.2         # via -r requirements.txt, elasticsearch, httpcore, httpx, netcdf4, requests
+certipy==0.1.3            # via -r requirements.txt, jupyterhub
+cffi==1.16.0              # via -r requirements.txt, argon2-cffi-bindings, cryptography
+cftime==1.6.3             # via -r requirements.txt, netcdf4
+charset-normalizer==3.3.2  # via -r requirements.txt, requests
+click==8.1.7              # via -r requirements.txt, asr, celery, click-default-group, click-didyoumean, click-plugins, click-repl, dask, flask, mkdocs, mkdocs-click, nomad-lab (pyproject.toml), pynxtools, uvicorn
+click-default-group==1.2.4  # via -r requirements.txt, pynxtools
+click-didyoumean==0.3.1   # via -r requirements.txt, celery
+click-plugins==1.1.1      # via -r requirements.txt, celery
+click-repl==0.3.0         # via -r requirements.txt, celery
+cloudpickle==3.0.0        # via -r requirements.txt, dask
 colorama==0.4.6           # via mkdocs-material, twine
-commonmark==0.9.1         # via recommonmark, -r requirements.txt
-contourpy==1.2.1          # via matplotlib, -r requirements.txt
+comm==0.2.2               # via -r requirements.txt, ipykernel, ipywidgets
+commonmark==0.9.1         # via -r requirements.txt, recommonmark
+contourpy==1.2.1          # via -r requirements.txt, matplotlib
 coverage==7.5.1           # via pytest-cov
-cryptography==42.0.7      # via jwcrypto, pyjwt, pyopenssl, rfc3161ng, secretstorage, -r requirements.txt
-cycler==0.12.1            # via matplotlib, -r requirements.txt
-dask==2024.5.1            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio, -r requirements.txt
-decorator==5.1.1          # via ipython, validators, -r requirements.txt
-deprecation==2.1.0        # via python-keycloak, -r requirements.txt
+cryptography==42.0.7      # via -r requirements.txt, jwcrypto, pyjwt, pyopenssl, rfc3161ng
+cycler==0.12.1            # via -r requirements.txt, matplotlib
+dask[array]==2024.5.1     # via -r requirements.txt, hyperspy, kikuchipy, orix, pyxem, rosettasciio
+debugpy==1.8.1            # via -r requirements.txt, ipykernel
+decorator==5.1.1          # via -r requirements.txt, ipyparallel, ipython, validators
+defusedxml==0.7.1         # via -r requirements.txt, nbconvert
+deprecation==2.1.0        # via -r requirements.txt, python-keycloak
 devtools==0.12.2          # via nomad-lab (pyproject.toml)
-diffpy-structure==3.1.0   # via diffsims, kikuchipy, orix, -r requirements.txt
-diffsims==0.5.2           # via kikuchipy, pyxem, -r requirements.txt
-dill==0.3.8               # via lmfit, -r requirements.txt
-dnspython==2.6.1          # via email-validator, pymongo, -r requirements.txt
-docker==7.0.0             # via dockerspawner, -r requirements.txt
+diffpy-structure==3.1.0   # via -r requirements.txt, diffsims, kikuchipy, orix
+diffsims==0.5.2           # via -r requirements.txt, kikuchipy, pyxem
+dill==0.3.8               # via -r requirements.txt, hyperspy, lmfit
+dnspython==2.6.1          # via -r requirements.txt, email-validator, pymongo
+docker==7.1.0             # via -r requirements.txt, dockerspawner
 dockerspawner==13.0.0     # via -r requirements.txt, nomad-lab (pyproject.toml)
 docstring-parser==0.16    # via -r requirements.txt, nomad-lab (pyproject.toml)
-docutils==0.21.2          # via m2r, readme-renderer, recommonmark, sphinx, -r requirements.txt
-elasticsearch==7.17.1     # via elasticsearch-dsl, -r requirements.txt, nomad-lab (pyproject.toml)
+docutils==0.21.2          # via -r requirements.txt, m2r, readme-renderer, recommonmark, sphinx
+elasticsearch==7.17.1     # via -r requirements.txt, elasticsearch-dsl, nomad-lab (pyproject.toml)
 elasticsearch-dsl==7.4.0  # via -r requirements.txt, nomad-lab (pyproject.toml)
-email-validator==1.3.1    # via optimade, -r requirements.txt
-escapism==1.0.1           # via dockerspawner, -r requirements.txt
+email-validator==1.3.1    # via -r requirements.txt, optimade
+entrypoints==0.4          # via -r requirements.txt, ipyparallel
+escapism==1.0.1           # via -r requirements.txt, dockerspawner
 essential-generators==1.0  # via nomad-lab (pyproject.toml)
-et-xmlfile==1.1.0         # via openpyxl, -r requirements.txt
-exceptiongroup==1.2.1     # via anyio, ipython, -r requirements.txt
+et-xmlfile==1.1.0         # via -r requirements.txt, openpyxl
+exceptiongroup==1.2.1     # via -r requirements.txt, anyio, ipython
 execnet==2.1.1            # via pytest-xdist
-executing==2.0.1          # via devtools, stack-data, -r requirements.txt
-f90wrap==0.2.14           # via quippy-ase, -r requirements.txt
-fabio==2024.4.0           # via pyfai, silx, -r requirements.txt
-fastapi==0.99.1           # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
-fasteners==0.19           # via mdanalysis, zarr, -r requirements.txt
+executing==2.0.1          # via -r requirements.txt, devtools, stack-data
+f90wrap==0.2.14           # via -r requirements.txt, quippy-ase
+fabio==2024.4.0           # via -r requirements.txt, pyfai, silx
+fastapi==0.99.1           # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
+fasteners==0.19           # via -r requirements.txt, mdanalysis, zarr
+fastjsonschema==2.19.1    # via -r requirements.txt, nbformat
 filelock==3.3.1           # via -r requirements.txt, nomad-lab (pyproject.toml)
-findiff==0.10.0           # via pynxtools-stm, -r requirements.txt
-flask==3.0.3              # via asr, -r requirements.txt
-flatdict==4.0.1           # via pynxtools, -r requirements.txt
-fonttools==4.51.0         # via matplotlib, -r requirements.txt
-fqdn==1.5.1               # via jsonschema, -r requirements.txt
-fsspec==2024.5.0          # via dask, -r requirements.txt
-future==1.0.0             # via uncertainties, -r requirements.txt
+findiff==0.10.0           # via -r requirements.txt, pynxtools-stm
+flask==3.0.3              # via -r requirements.txt, asr
+flatdict==3.4.0           # via -r requirements.txt, ifes-apt-tc-data-modeling, pynxtools-em
+fonttools==4.51.0         # via -r requirements.txt, matplotlib
+fqdn==1.5.1               # via -r requirements.txt, jsonschema
+fsspec==2024.5.0          # via -r requirements.txt, dask, hyperspy
+future==1.0.0             # via -r requirements.txt, uncertainties
 ghp-import==2.1.0         # via mkdocs
-gitdb==4.0.11             # via gitpython, -r requirements.txt
-gitpython==3.1.43         # via mkdocs-git-revision-date-localized-plugin, pynxtools, -r requirements.txt, nomad-lab (pyproject.toml)
-greenlet==3.0.3           # via sqlalchemy, -r requirements.txt
-griddataformats==1.0.2    # via mdanalysis, -r requirements.txt
-gsd==3.2.1                # via mdanalysis, -r requirements.txt
+gitdb==4.0.11             # via -r requirements.txt, gitpython
+gitpython==3.1.43         # via -r requirements.txt, mkdocs-git-revision-date-localized-plugin, nomad-lab (pyproject.toml)
+greenlet==3.0.3           # via -r requirements.txt, sqlalchemy
+griddataformats==1.0.2    # via -r requirements.txt, mdanalysis
+gsd==3.2.1                # via -r requirements.txt, mdanalysis
 gunicorn==21.2.0          # via -r requirements.txt, nomad-lab (pyproject.toml)
-h11==0.14.0               # via httpcore, uvicorn, -r requirements.txt
-h5grove==1.3.0            # via -r requirements.txt, nomad-lab (pyproject.toml)
-h5py==3.11.0              # via fabio, h5grove, hdf5plugin, ifes-apt-tc-data-modeling, kikuchipy, nionswift, orix, phonopy, pyfai, pynxtools, pynxtools-mpes, pynxtools-xps, pyxem, rosettasciio, silx, -r requirements.txt, nomad-lab (pyproject.toml)
-hdf5plugin==4.4.0         # via fabio, -r requirements.txt
+h11==0.14.0               # via -r requirements.txt, httpcore, uvicorn
+h5grove[fastapi]==1.3.0   # via -r requirements.txt, jupyterlab-h5web, nomad-lab (pyproject.toml)
+h5py==3.11.0              # via -r requirements.txt, fabio, h5grove, hdf5plugin, hyperspy, ifes-apt-tc-data-modeling, jupyterlab-h5web, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, pynxtools, pynxtools-mpes, pynxtools-xps, pyxem, silx
+hdf5plugin==4.4.0         # via -r requirements.txt, fabio
 hjson==3.1.0              # via -r requirements.txt, nomad-lab (pyproject.toml)
 html5lib==1.1             # via -r requirements.txt, nomad-lab (pyproject.toml)
-httpcore==1.0.5           # via httpx, -r requirements.txt
-httptools==0.6.1          # via uvicorn, -r requirements.txt
-httpx==0.27.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
-hyperspy==2.1.0           # via kikuchipy, pynxtools, pyxem, -r requirements.txt
-idna==3.7                 # via anyio, email-validator, httpx, jsonschema, requests, -r requirements.txt
-ifes-apt-tc-data-modeling==0.1  # via pynxtools, -r requirements.txt
-imageio==2.34.1           # via kikuchipy, nionswift, nionswift-io, nionui, scikit-image, -r requirements.txt
-imagesize==1.4.1          # via sphinx, -r requirements.txt
-importlib-metadata==7.1.0  # via build, dask, flask, hyperspy, jupyterhub, keyring, markdown, mkdocs, mkdocs-get-deps, pynxtools, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml)
-importlib-resources==6.4.0  # via matplotlib, spglib, -r requirements.txt
+httpcore==1.0.5           # via -r requirements.txt, httpx
+httptools==0.6.1          # via -r requirements.txt, uvicorn
+httpx==0.27.0             # via -r requirements.txt, jupyterlab, nomad-lab (pyproject.toml)
+hyperspy==1.7.6           # via -r requirements.txt, kikuchipy, pyxem
+idna==3.7                 # via -r requirements.txt, anyio, email-validator, httpx, jsonschema, requests
+ifes-apt-tc-data-modeling==0.2.2  # via -r requirements.txt, pynxtools-apm
+igor2==0.5.2              # via -r requirements.txt, pynxtools-xps
+imageio==2.27.0           # via -r requirements.txt, hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image
+imagesize==1.4.1          # via -r requirements.txt, sphinx
+importlib-metadata==7.1.0  # via -r requirements.txt, build, dask, flask, hyperspy, jupyter-client, jupyter-lsp, jupyterhub, jupyterlab, jupyterlab-server, keyring, markdown, mkdocs, mkdocs-get-deps, nbconvert, nomad-lab (pyproject.toml), pynxtools, sphinx, twine
+importlib-resources==6.4.0  # via -r requirements.txt, matplotlib, spglib
 inflection==0.5.1         # via -r requirements.txt, nomad-lab (pyproject.toml)
-ipython==8.18.1           # via pynxtools-stm, -r requirements.txt
-isodate==0.6.1            # via rdflib, -r requirements.txt
-isoduration==20.11.0      # via jsonschema, -r requirements.txt
-itsdangerous==2.2.0       # via flask, -r requirements.txt, nomad-lab (pyproject.toml)
+ipykernel==6.29.4         # via -r requirements.txt, ipyparallel, jupyter, jupyter-console, jupyterlab, qtconsole
+ipyparallel==8.8.0        # via -r requirements.txt, hyperspy
+ipython==8.18.1           # via -r requirements.txt, hyperspy, ipykernel, ipyparallel, ipywidgets, jupyter-console, pynxtools-xrd
+ipywidgets==8.1.2         # via -r requirements.txt, jupyter
+isodate==0.6.1            # via -r requirements.txt, rdflib
+isoduration==20.11.0      # via -r requirements.txt, jsonschema
+itsdangerous==2.2.0       # via -r requirements.txt, flask, nomad-lab (pyproject.toml)
 jaraco-classes==3.4.0     # via keyring
 jaraco-context==5.3.0     # via keyring
 jaraco-functools==4.0.1   # via keyring
-jedi==0.19.1              # via ipython, -r requirements.txt
-jeepney==0.8.0            # via keyring, secretstorage
-jinja2==3.1.4             # via flask, hyperspy, jupyterhub, mkdocs, mkdocs-macros-plugin, mkdocs-material, sphinx, -r requirements.txt
+jedi==0.19.1              # via -r requirements.txt, ipython
+jinja2==3.1.4             # via -r requirements.txt, flask, hyperspy, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, mkdocs, mkdocs-macros-plugin, mkdocs-material, nbconvert, sphinx
 jmespath==1.0.1           # via -r requirements.txt, nomad-lab (pyproject.toml)
-joblib==1.4.2             # via mdanalysis, pymatgen, scikit-learn, -r requirements.txt
-jsonpointer==2.4          # via jsonschema, -r requirements.txt
-jsonschema==4.17.3        # via jupyter-telemetry, oauthenticator, -r requirements.txt, nomad-lab (pyproject.toml)
-jupyter-telemetry==0.1.0  # via jupyterhub, -r requirements.txt
-jupyterhub==4.0.2         # via dockerspawner, oauthenticator, -r requirements.txt, nomad-lab (pyproject.toml)
-jwcrypto==1.5.6           # via python-keycloak, -r requirements.txt
+joblib==1.4.2             # via -r requirements.txt, mdanalysis, pymatgen, scikit-learn
+json5==0.9.25             # via -r requirements.txt, jupyterlab-server
+jsonpointer==2.4          # via -r requirements.txt, jsonschema
+jsonschema[format,format-nongpl]==4.17.3  # via -r requirements.txt, jupyter-events, jupyter-telemetry, jupyterlab-server, nbformat, nomad-lab (pyproject.toml), oauthenticator
+jupyter==1.0.0            # via -r requirements.txt, ifes-apt-tc-data-modeling
+jupyter-client==8.6.2     # via -r requirements.txt, ipykernel, ipyparallel, jupyter-console, jupyter-server, nbclient, qtconsole
+jupyter-console==6.6.3    # via -r requirements.txt, jupyter
+jupyter-core==5.7.2       # via -r requirements.txt, ipykernel, jupyter-client, jupyter-console, jupyter-server, jupyterlab, nbclient, nbconvert, nbformat, qtconsole
+jupyter-events==0.5.0     # via -r requirements.txt, jupyter-server
+jupyter-lsp==2.2.5        # via -r requirements.txt, jupyterlab
+jupyter-server==2.5.0     # via -r requirements.txt, jupyter-lsp, jupyterlab, jupyterlab-h5web, jupyterlab-server, notebook, notebook-shim
+jupyter-server-terminals==0.5.3  # via -r requirements.txt, jupyter-server
+jupyter-telemetry==0.1.0  # via -r requirements.txt, jupyterhub
+jupyterhub==4.0.2         # via -r requirements.txt, dockerspawner, nomad-lab (pyproject.toml), oauthenticator
+jupyterlab==4.1.6         # via -r requirements.txt, ifes-apt-tc-data-modeling, notebook
+jupyterlab-h5web==11.1.0  # via -r requirements.txt, ifes-apt-tc-data-modeling
+jupyterlab-pygments==0.3.0  # via -r requirements.txt, nbconvert
+jupyterlab-server==2.24.0  # via -r requirements.txt, jupyterlab, notebook
+jupyterlab-widgets==3.0.10  # via -r requirements.txt, ipywidgets
+jwcrypto==1.5.6           # via -r requirements.txt, python-keycloak
 keyring==25.2.1           # via twine
-kikuchipy==0.8.7          # via pynxtools, -r requirements.txt
-kiwisolver==1.4.5         # via matplotlib, -r requirements.txt
-kombu==5.3.7              # via celery, -r requirements.txt
-lark==1.1.9               # via optimade, -r requirements.txt
-latexcodec==3.0.0         # via pybtex, -r requirements.txt
-llvmlite==0.42.0          # via numba, -r requirements.txt
-lmfit==1.3.1              # via pyxem, -r requirements.txt
-locket==1.0.0             # via partd, -r requirements.txt
-lxml==5.2.2               # via fabio, lxml-html-clean, -r requirements.txt, nomad-lab (pyproject.toml)
+kikuchipy==0.9.0          # via -r requirements.txt, pynxtools-em
+kiwisolver==1.4.5         # via -r requirements.txt, matplotlib
+kombu==5.3.7              # via -r requirements.txt, celery
+lark==1.1.9               # via -r requirements.txt, optimade
+latexcodec==3.0.0         # via -r requirements.txt, pybtex
+llvmlite==0.42.0          # via -r requirements.txt, numba
+lmfit==1.3.1              # via -r requirements.txt, pyxem
+locket==1.0.0             # via -r requirements.txt, partd
+lxml==5.2.2               # via -r requirements.txt, fabio, lxml-html-clean, nomad-lab (pyproject.toml), pynxtools
 lxml-html-clean==0.1.1    # via -r requirements.txt, nomad-lab (pyproject.toml)
 m2r==0.2.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
-mako==1.3.5               # via alembic, -r requirements.txt
+mako==1.3.5               # via -r requirements.txt, alembic
 markdown==3.6             # via mkdocs, mkdocs-click, mkdocs-material, pymdown-extensions
-markupsafe==2.1.5         # via jinja2, mako, mkdocs, werkzeug, -r requirements.txt, nomad-lab (pyproject.toml)
+markupsafe==2.1.5         # via -r requirements.txt, jinja2, mako, mkdocs, nbconvert, nomad-lab (pyproject.toml), werkzeug
 matid==2.0.1              # via -r requirements.txt, nomad-lab (pyproject.toml)
-matplotlib==3.8.4         # via ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay, -r requirements.txt
-matplotlib-inline==0.1.7  # via ipython, -r requirements.txt
-matplotlib-scalebar==0.8.1  # via orix, -r requirements.txt
-mda-xdrlib==0.2.0         # via pyedr, -r requirements.txt
+matplotlib==3.8.4         # via -r requirements.txt, ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay
+matplotlib-inline==0.1.7  # via -r requirements.txt, ipykernel, ipython
+matplotlib-scalebar==0.8.1  # via -r requirements.txt, orix
+mda-xdrlib==0.2.0         # via -r requirements.txt, pyedr
 mdanalysis==2.5.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
-mergedeep==1.3.4          # via mkdocs, mkdocs-get-deps, pynxtools, -r requirements.txt
-mistune==3.0.2            # via m2r, -r requirements.txt
+mergedeep==1.3.4          # via -r requirements.txt, mkdocs, mkdocs-get-deps, pynxtools
+mistune==3.0.2            # via -r requirements.txt, m2r, nbconvert
 mkdocs==1.6.0             # via mkdocs-git-revision-date-localized-plugin, mkdocs-macros-plugin, mkdocs-material, mkdocs-redirects, nomad-lab (pyproject.toml)
 mkdocs-click==0.8.1       # via nomad-lab (pyproject.toml)
 mkdocs-get-deps==0.2.0    # via mkdocs
@@ -152,197 +185,218 @@ mkdocs-macros-plugin==1.0.5  # via nomad-lab (pyproject.toml)
 mkdocs-material==9.5.24   # via nomad-lab (pyproject.toml)
 mkdocs-material-extensions==1.3.1  # via mkdocs-material, nomad-lab (pyproject.toml)
 mkdocs-redirects==1.2.1   # via nomad-lab (pyproject.toml)
-mmtf-python==1.1.3        # via mdanalysis, -r requirements.txt
+mmtf-python==1.1.3        # via -r requirements.txt, mdanalysis
 mongoengine==0.28.2       # via -r requirements.txt, nomad-lab (pyproject.toml)
-mongomock==4.1.2          # via optimade, -r requirements.txt
-monty==2024.5.15          # via pymatgen, -r requirements.txt
+mongomock==4.1.2          # via -r requirements.txt, optimade
+monty==2024.5.24          # via -r requirements.txt, pymatgen
 more-itertools==10.2.0    # via jaraco-classes, jaraco-functools, pytest
-mpmath==1.3.0             # via sympy, -r requirements.txt
-mrcfile==1.5.0            # via griddataformats, -r requirements.txt
-msgpack==1.0.8            # via blosc2, mmtf-python, -r requirements.txt, nomad-lab (pyproject.toml)
+mpmath==1.3.0             # via -r requirements.txt, sympy
+mrcfile==1.5.0            # via -r requirements.txt, griddataformats
+msgpack==1.0.8            # via -r requirements.txt, blosc2, mmtf-python, nomad-lab (pyproject.toml)
 mypy==1.0.1               # via nomad-lab (pyproject.toml)
 mypy-extensions==1.0.0    # via mypy
 names==0.3.0              # via nomad-lab (pyproject.toml)
-natsort==8.4.0            # via hyperspy, -r requirements.txt
-ndindex==1.8              # via blosc2, -r requirements.txt
+natsort==8.4.0            # via -r requirements.txt, hyperspy
+nbclient==0.10.0          # via -r requirements.txt, nbconvert
+nbconvert==7.16.4         # via -r requirements.txt, jupyter, jupyter-server
+nbformat==5.10.4          # via -r requirements.txt, jupyter-server, nbclient, nbconvert
+ndindex==1.8              # via -r requirements.txt, blosc2
+nest-asyncio==1.6.0       # via -r requirements.txt, ipykernel
 netcdf4==1.6.5            # via -r requirements.txt, nomad-lab (pyproject.toml)
-networkx==2.6.3           # via matid, mdanalysis, pymatgen, radioactivedecay, scikit-image, -r requirements.txt, nomad-lab (pyproject.toml)
+networkx==2.6.3           # via -r requirements.txt, matid, mdanalysis, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
 nh3==0.2.17               # via readme-renderer
-niondata==0.15.5          # via nionswift, nionswift-io, -r requirements.txt
-nionswift==0.16.8         # via pynxtools, -r requirements.txt
-nionswift-io==0.15.1      # via nionswift, -r requirements.txt
-nionui==0.6.11            # via nionswift, -r requirements.txt
-nionutils==0.4.10         # via niondata, nionswift, nionswift-io, nionui, -r requirements.txt
+niondata==0.15.5          # via -r requirements.txt, nionswift, nionswift-io
+nionswift==0.16.8         # via -r requirements.txt, pynxtools-em
+nionswift-io==0.15.1      # via -r requirements.txt, nionswift
+nionui==0.6.11            # via -r requirements.txt, nionswift
+nionutils==0.4.10         # via -r requirements.txt, niondata, nionswift, nionswift-io, nionui
+notebook==7.1.3           # via -r requirements.txt, jupyter
+notebook-shim==0.2.4      # via -r requirements.txt, jupyterlab, notebook
 nptyping==1.4.4           # via -r requirements.txt, nomad-lab (pyproject.toml)
-numba==0.59.1             # via diffsims, kikuchipy, orix, pyxem, -r requirements.txt
-numcodecs==0.12.1         # via zarr, -r requirements.txt
-numexpr==2.10.0           # via pyfai, pyxem, tables, -r requirements.txt
-numpy==1.22.4             # via ase, biopython, blosc2, cftime, contourpy, dask, diffsims, f90wrap, fabio, findiff, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pycifrw, pyedr, pyfai, pymatgen, pynxtools, pywavelets, pyxem, quippy-ase, radioactivedecay, rdkit, rosettasciio, scikit-image, scikit-learn, scipy, shapely, silx, spglib, tables, tifffile, xarray, zarr, -r requirements.txt, nomad-lab (pyproject.toml)
-numpy-quaternion==2023.0.3  # via orix, -r requirements.txt
+numba==0.59.1             # via -r requirements.txt, diffsims, hyperspy, kikuchipy, orix, pyxem, sparse
+numcodecs==0.12.1         # via -r requirements.txt, zarr
+numexpr==2.10.0           # via -r requirements.txt, hyperspy, pyfai, pyxem, tables
+numpy==1.22.4             # via -r requirements.txt, ase, biopython, blosc2, cftime, contourpy, dask, diffsims, f90wrap, fabio, findiff, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, igor2, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pycifrw, pyedr, pyfai, pymatgen, pynxtools, pywavelets, pyxem, quippy-ase, radioactivedecay, rdkit, rosettasciio, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tables, tifffile, xarray, xraydb, zarr
+numpy-quaternion==2023.0.3  # via -r requirements.txt, orix
 oauthenticator==15.1.0    # via -r requirements.txt, nomad-lab (pyproject.toml)
-oauthlib==3.2.2           # via jupyterhub, -r requirements.txt
+oauthlib==3.2.2           # via -r requirements.txt, jupyterhub
 openpyxl==3.1.2           # via -r requirements.txt, nomad-lab (pyproject.toml)
-optimade==0.22.1          # via -r requirements.txt, nomad-lab (pyproject.toml)
-orix==0.12.1.post0        # via diffsims, kikuchipy, pyxem, -r requirements.txt
-orjson==3.10.3            # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
-packaging==24.0           # via build, dask, deprecation, docker, f90wrap, gunicorn, hyperspy, jupyterhub, matplotlib, mdanalysis, mkdocs, mongomock, pint, plotly, pooch, pytest, scikit-image, silx, sphinx, tables, xarray, -r requirements.txt
+optimade[mongo]==0.22.1   # via -r requirements.txt, nomad-lab (pyproject.toml)
+orix==0.12.1.post0        # via -r requirements.txt, diffsims, kikuchipy, pyxem
+orjson==3.10.3            # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
+packaging==24.0           # via -r requirements.txt, build, dask, deprecation, f90wrap, gunicorn, hyperspy, ipykernel, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mkdocs, mongomock, nbconvert, pint, plotly, pooch, pytest, qtconsole, qtpy, scikit-image, silx, sphinx, tables, xarray, xraydb
 paginate==0.5.6           # via mkdocs-material
-palettable==3.3.3         # via pymatgen, -r requirements.txt
-pamela==1.1.0             # via jupyterhub, -r requirements.txt
-pandas==1.5.3             # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, -r requirements.txt, nomad-lab (pyproject.toml)
+palettable==3.3.3         # via -r requirements.txt, pymatgen
+pamela==1.1.0             # via -r requirements.txt, jupyterhub
+pandas==1.5.3             # via -r requirements.txt, ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray
+pandocfilters==1.5.1      # via -r requirements.txt, nbconvert
 panedr==0.8.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 parmed==4.2.2             # via -r requirements.txt, nomad-lab (pyproject.toml)
-parso==0.8.4              # via jedi, -r requirements.txt
-partd==1.4.2              # via dask, -r requirements.txt
+parso==0.8.4              # via -r requirements.txt, jedi
+partd==1.4.2              # via -r requirements.txt, dask
 pathspec==0.12.1          # via mkdocs
-pexpect==4.9.0            # via ipython, -r requirements.txt
-phonopy==2.23.1           # via asr, -r requirements.txt
-pillow==10.3.0            # via fabio, imageio, matplotlib, nionswift, rdkit, scikit-image, -r requirements.txt
-pint==0.17                # via hyperspy, rosettasciio, -r requirements.txt, nomad-lab (pyproject.toml)
+pexpect==4.9.0            # via -r requirements.txt, ipython
+phonopy==2.23.1           # via -r requirements.txt, asr
+pillow==10.0.1            # via -r requirements.txt, fabio, hyperspy, imageio, matplotlib, nionswift, rdkit, scikit-image
+pint==0.17                # via -r requirements.txt, hyperspy, nomad-lab (pyproject.toml), pynxtools-xps, rosettasciio
 pkginfo==1.10.0           # via twine
-platformdirs==4.2.2       # via mkdocs-get-deps, pooch, -r requirements.txt
-plotly==5.22.0            # via asr, pymatgen, -r requirements.txt
+platformdirs==4.2.2       # via -r requirements.txt, jupyter-core, mkdocs-get-deps, pooch, xraydb
+plotly==5.22.0            # via -r requirements.txt, asr, pymatgen
 pluggy==0.13.1            # via pytest
-ply==3.11                 # via pycifrw, -r requirements.txt
-pooch==1.8.1              # via hyperspy, kikuchipy, orix, pyxem, -r requirements.txt
-prettytable==3.10.0       # via hyperspy, -r requirements.txt
-prometheus-client==0.20.0  # via jupyterhub, -r requirements.txt
-prompt-toolkit==3.0.43    # via click-repl, ipython, -r requirements.txt
-psutil==5.9.8             # via diffsims, pyxem, -r requirements.txt
-ptyprocess==0.7.0         # via pexpect, -r requirements.txt
-pure-eval==0.2.2          # via stack-data, -r requirements.txt
+ply==3.11                 # via -r requirements.txt, pycifrw
+pooch==1.8.1              # via -r requirements.txt, kikuchipy, orix
+prettytable==3.10.0       # via -r requirements.txt, hyperspy
+prometheus-client==0.20.0  # via -r requirements.txt, jupyter-server, jupyterhub
+prompt-toolkit==3.0.43    # via -r requirements.txt, click-repl, ipython, jupyter-console
+psutil==5.9.8             # via -r requirements.txt, diffsims, ipykernel, ipyparallel, pyxem
+ptyprocess==0.7.0         # via -r requirements.txt, pexpect, terminado
+pure-eval==0.2.2          # via -r requirements.txt, stack-data
 py==1.11.0                # via pytest, pytest-forked
-py-cpuinfo==9.0.0         # via blosc2, tables, -r requirements.txt
-pyasn1==0.6.0             # via pyasn1-modules, rfc3161ng, -r requirements.txt
-pyasn1-modules==0.4.0     # via rfc3161ng, -r requirements.txt
+py-cpuinfo==9.0.0         # via -r requirements.txt, blosc2, tables
+pyasn1==0.6.0             # via -r requirements.txt, pyasn1-modules, rfc3161ng
+pyasn1-modules==0.4.0     # via -r requirements.txt, rfc3161ng
 pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88ab7e284b59c43ec42f18370  # via -r requirements.txt, nomad-lab (pyproject.toml)
-pybtex==0.24.0            # via pymatgen, -r requirements.txt
-pycifrw==4.4.6            # via diffpy-structure, -r requirements.txt
+pybtex==0.24.0            # via -r requirements.txt, pymatgen
+pycifrw==4.4.6            # via -r requirements.txt, diffpy-structure
 pycodestyle==2.11.1       # via nomad-lab (pyproject.toml)
-pycparser==2.22           # via cffi, -r requirements.txt
-pydantic==1.10.15         # via fastapi, optimade, -r requirements.txt, nomad-lab (pyproject.toml)
-pyedr==0.8.0              # via panedr, -r requirements.txt
-pyfai==2023.9.0           # via pyxem, -r requirements.txt
-pygments==2.18.0          # via devtools, ipython, mkdocs-material, readme-renderer, sphinx, -r requirements.txt
-pyjwt==2.6.0              # via -r requirements.txt, nomad-lab (pyproject.toml)
-pymatgen==2023.9.25       # via asr, -r requirements.txt, nomad-lab (pyproject.toml)
+pycparser==2.22           # via -r requirements.txt, cffi
+pydantic==1.10.15         # via -r requirements.txt, fastapi, nomad-lab (pyproject.toml), optimade
+pyedr==0.8.0              # via -r requirements.txt, panedr
+pyfai==2024.5.0           # via -r requirements.txt, pyxem
+pygments==2.18.0          # via -r requirements.txt, devtools, ipython, jupyter-console, mkdocs-material, nbconvert, qtconsole, readme-renderer, sphinx
+pyjwt[crypto]==2.6.0      # via -r requirements.txt, nomad-lab (pyproject.toml)
+pymatgen==2023.9.25       # via -r requirements.txt, asr, nomad-lab (pyproject.toml)
 pymdown-extensions==10.8.1  # via mkdocs-material
-pymongo==4.6.3            # via mongoengine, optimade, -r requirements.txt, nomad-lab (pyproject.toml)
-pynxtools==0.1.1          # via pynxtools-mpes, pynxtools-stm, pynxtools-xps, -r requirements.txt, nomad-lab (pyproject.toml)
-pynxtools-mpes==0.0.3     # via pynxtools, -r requirements.txt
-pynxtools-stm==1.0.1      # via pynxtools, -r requirements.txt
-pynxtools-xps==0.0.3      # via pynxtools, -r requirements.txt
-pyopenssl==24.1.0         # via certipy, -r requirements.txt
-pyparsing==3.1.2          # via matplotlib, rdflib, -r requirements.txt
+pymongo==4.6.3            # via -r requirements.txt, mongoengine, nomad-lab (pyproject.toml), optimade
+pynxtools[apm,convert,ellips,em,mpes,stm,xps,xrd]==0.3.1  # via -r requirements.txt, nomad-lab (pyproject.toml), pynxtools-apm, pynxtools-ellips, pynxtools-em, pynxtools-mpes, pynxtools-stm, pynxtools-xps, pynxtools-xrd
+pynxtools-apm==0.1.1      # via -r requirements.txt, pynxtools
+pynxtools-ellips==0.0.2   # via -r requirements.txt, pynxtools
+pynxtools-em==0.1.1       # via -r requirements.txt, pynxtools
+pynxtools-mpes==0.0.3     # via -r requirements.txt, pynxtools
+pynxtools-stm==1.0.4      # via -r requirements.txt, pynxtools
+pynxtools-xps==0.2.2      # via -r requirements.txt, pynxtools
+pynxtools-xrd==0.0.1      # via -r requirements.txt, pynxtools
+pyopenssl==24.1.0         # via -r requirements.txt, certipy
+pyparsing==3.1.2          # via -r requirements.txt, matplotlib, rdflib
 pyproject-hooks==1.1.0    # via build
-pyrsistent==0.20.0        # via jsonschema, -r requirements.txt
-pytest==5.4.3             # via pytest-cov, pytest-forked, pytest-timeout, pytest-xdist, nomad-lab (pyproject.toml)
+pyrsistent==0.20.0        # via -r requirements.txt, jsonschema
+pytest==5.4.3             # via nomad-lab (pyproject.toml), pytest-cov, pytest-forked, pytest-timeout, pytest-xdist
 pytest-cov==2.7.1         # via nomad-lab (pyproject.toml)
 pytest-forked==1.6.0      # via pytest-xdist
 pytest-timeout==1.4.2     # via nomad-lab (pyproject.toml)
 pytest-xdist==1.34.0      # via nomad-lab (pyproject.toml)
-python-box==6.1.0         # via rosettasciio, -r requirements.txt
-python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, jupyterhub, matplotlib, mkdocs-macros-plugin, pandas, pybis, rfc3161ng, rosettasciio, -r requirements.txt
-python-dotenv==1.0.1      # via uvicorn, -r requirements.txt
+python-box==6.1.0         # via -r requirements.txt, rosettasciio
+python-dateutil==2.9.0.post0  # via -r requirements.txt, arrow, celery, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, pandas, pybis, rfc3161ng, rosettasciio
+python-dotenv==1.0.1      # via -r requirements.txt, uvicorn
 python-gitlab==2.10.1     # via nomad-lab (pyproject.toml)
-python-json-logger==2.0.2  # via jupyter-telemetry, -r requirements.txt, nomad-lab (pyproject.toml)
+python-json-logger==2.0.2  # via -r requirements.txt, jupyter-events, jupyter-telemetry, nomad-lab (pyproject.toml)
 python-keycloak==4.0.0    # via -r requirements.txt, nomad-lab (pyproject.toml)
 python-logstash==0.4.6    # via -r requirements.txt, nomad-lab (pyproject.toml)
 python-magic==0.4.24      # via -r requirements.txt, nomad-lab (pyproject.toml)
 python-multipart==0.0.9   # via -r requirements.txt, nomad-lab (pyproject.toml)
-pytz==2024.1              # via mkdocs-git-revision-date-localized-plugin, nionswift, pandas, pynxtools, -r requirements.txt, nomad-lab (pyproject.toml)
-pytz-deprecation-shim==0.1.0.post0  # via tzlocal, -r requirements.txt
-pywavelets==1.6.0         # via scikit-image, -r requirements.txt
-pyxem==0.18.0             # via pynxtools, -r requirements.txt
-pyyaml==6.0.1             # via dask, hyperspy, kikuchipy, mkdocs, mkdocs-get-deps, mkdocs-macros-plugin, phonopy, pybtex, pymdown-extensions, pynxtools, pynxtools-mpes, pyyaml-env-tag, rosettasciio, uvicorn, -r requirements.txt, nomad-lab (pyproject.toml)
+pytz==2024.1              # via -r requirements.txt, mkdocs-git-revision-date-localized-plugin, nionswift, nomad-lab (pyproject.toml), pandas
+pywavelets==1.6.0         # via -r requirements.txt, scikit-image
+pyxem==0.16.0             # via -r requirements.txt, pynxtools-em
+pyyaml==6.0.1             # via -r requirements.txt, dask, hyperspy, jupyter-events, kikuchipy, mkdocs, mkdocs-get-deps, mkdocs-macros-plugin, nomad-lab (pyproject.toml), phonopy, pybtex, pymdown-extensions, pynxtools, pynxtools-mpes, pyyaml-env-tag, rosettasciio, uvicorn
 pyyaml-env-tag==0.1       # via mkdocs
 pyzeo==0.1.5              # via -r requirements.txt, nomad-lab (pyproject.toml)
+pyzmq==26.0.3             # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-console, jupyter-server, qtconsole
+qtconsole==5.5.2          # via -r requirements.txt, jupyter
+qtpy==2.4.1               # via -r requirements.txt, qtconsole
 quippy-ase==0.9.14        # via -r requirements.txt, nomad-lab (pyproject.toml)
-radioactivedecay==0.5.0   # via ifes-apt-tc-data-modeling, -r requirements.txt
+radioactivedecay==0.5.0   # via -r requirements.txt, ifes-apt-tc-data-modeling
 rdflib==5.0.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
 rdkit==2023.9.5           # via -r requirements.txt, nomad-lab (pyproject.toml)
 readme-renderer==43.0     # via twine
 recommonmark==0.7.1       # via -r requirements.txt, nomad-lab (pyproject.toml)
 regex==2024.5.15          # via mkdocs-material
-requests==2.32.2          # via docker, hyperspy, jupyterhub, mkdocs-material, oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine, -r requirements.txt, nomad-lab (pyproject.toml)
-requests-toolbelt==1.0.0  # via python-gitlab, python-keycloak, twine, -r requirements.txt
+requests==2.32.2          # via -r requirements.txt, docker, hyperspy, jupyterhub, jupyterlab-server, mkdocs-material, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, python-gitlab, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, twine
+requests-toolbelt==1.0.0  # via -r requirements.txt, python-gitlab, python-keycloak, twine
 rfc3161ng==2.1.3          # via -r requirements.txt, nomad-lab (pyproject.toml)
-rfc3339-validator==0.1.4  # via jsonschema, -r requirements.txt
+rfc3339-validator==0.1.4  # via -r requirements.txt, jsonschema
 rfc3986==2.0.0            # via twine
-rfc3987==1.3.8            # via jsonschema, -r requirements.txt
+rfc3986-validator==0.1.1  # via -r requirements.txt, jsonschema
+rfc3987==1.3.8            # via -r requirements.txt, jsonschema
 rope==0.21.0              # via nomad-lab (pyproject.toml)
-rosettasciio==0.4         # via hyperspy, -r requirements.txt
-ruamel-yaml==0.18.6       # via jupyter-telemetry, oauthenticator, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml)
-ruamel-yaml-clib==0.2.8   # via ruamel-yaml, -r requirements.txt
+rosettasciio==0.4         # via -r requirements.txt, pynxtools-em
+ruamel-yaml==0.18.6       # via -r requirements.txt, jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator, pymatgen
+ruamel-yaml-clib==0.2.8   # via -r requirements.txt, ruamel-yaml
 ruff==0.4.5               # via nomad-lab (pyproject.toml)
 runstats==2.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
-scikit-image==0.19.3      # via hyperspy, kikuchipy, pyxem, -r requirements.txt
-scikit-learn==1.5.0       # via kikuchipy, matid, pyxem, -r requirements.txt, nomad-lab (pyproject.toml)
-scipy==1.13.1             # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, orix, pyfai, pymatgen, pynxtools, pyxem, radioactivedecay, scikit-image, scikit-learn, -r requirements.txt, nomad-lab (pyproject.toml)
-secretstorage==3.3.3      # via keyring
-sentinels==1.0.0          # via mongomock, -r requirements.txt
-setuptools==70.0.0        # via radioactivedecay, -r requirements.txt
-shapely==2.0.4            # via pyxem, -r requirements.txt
-silx==2.1.0               # via pyfai, -r requirements.txt
-six==1.16.0               # via asttokens, basicauth, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, pytest-xdist, python-dateutil, rdflib, rfc3339-validator, validators, -r requirements.txt
-smmap==5.0.1              # via gitdb, -r requirements.txt
-sniffio==1.3.1            # via anyio, httpx, -r requirements.txt
-snowballstemmer==2.2.0    # via sphinx, -r requirements.txt
-soupsieve==2.5            # via beautifulsoup4, -r requirements.txt
-spglib==2.4.0             # via asr, matid, phonopy, pymatgen, -r requirements.txt
-sphinx==7.3.7             # via recommonmark, -r requirements.txt
-sphinxcontrib-applehelp==1.0.8  # via sphinx, -r requirements.txt
-sphinxcontrib-devhelp==1.0.6  # via sphinx, -r requirements.txt
-sphinxcontrib-htmlhelp==2.0.5  # via sphinx, -r requirements.txt
-sphinxcontrib-jsmath==1.0.1  # via sphinx, -r requirements.txt
-sphinxcontrib-qthelp==1.0.7  # via sphinx, -r requirements.txt
-sphinxcontrib-serializinghtml==1.1.10  # via sphinx, -r requirements.txt
-sqlalchemy==2.0.30        # via alembic, jupyterhub, -r requirements.txt
-stack-data==0.6.3         # via ipython, -r requirements.txt
-starlette==0.27.0         # via fastapi, -r requirements.txt
+scikit-image==0.19.3      # via -r requirements.txt, hyperspy, kikuchipy, pyxem
+scikit-learn==1.5.0       # via -r requirements.txt, kikuchipy, matid, nomad-lab (pyproject.toml), pyxem
+scipy==1.13.1             # via -r requirements.txt, ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse, xraydb
+send2trash==1.8.3         # via -r requirements.txt, jupyter-server
+sentinels==1.0.0          # via -r requirements.txt, mongomock
+silx==2.1.0               # via -r requirements.txt, pyfai
+six==1.16.0               # via -r requirements.txt, anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, pytest-xdist, python-dateutil, rdflib, rfc3339-validator, validators
+smmap==5.0.1              # via -r requirements.txt, gitdb
+sniffio==1.3.1            # via -r requirements.txt, anyio, httpx
+snowballstemmer==2.2.0    # via -r requirements.txt, sphinx
+soupsieve==2.5            # via -r requirements.txt, beautifulsoup4
+sparse==0.15.4            # via -r requirements.txt, hyperspy
+spglib==2.4.0             # via -r requirements.txt, asr, matid, phonopy, pymatgen
+sphinx==7.3.7             # via -r requirements.txt, recommonmark
+sphinxcontrib-applehelp==1.0.8  # via -r requirements.txt, sphinx
+sphinxcontrib-devhelp==1.0.6  # via -r requirements.txt, sphinx
+sphinxcontrib-htmlhelp==2.0.5  # via -r requirements.txt, sphinx
+sphinxcontrib-jsmath==1.0.1  # via -r requirements.txt, sphinx
+sphinxcontrib-qthelp==1.0.7  # via -r requirements.txt, sphinx
+sphinxcontrib-serializinghtml==1.1.10  # via -r requirements.txt, sphinx
+sqlalchemy==2.0.30        # via -r requirements.txt, alembic, jupyterhub, xraydb
+stack-data==0.6.3         # via -r requirements.txt, ipython
+starlette==0.27.0         # via -r requirements.txt, fastapi
 structlog==24.1.0         # via -r requirements.txt, nomad-lab (pyproject.toml)
-sympy==1.12               # via findiff, hyperspy, pymatgen, radioactivedecay, -r requirements.txt
-tables==3.9.2             # via ifes-apt-tc-data-modeling, -r requirements.txt
-tabulate==0.8.9           # via pybis, pymatgen, -r requirements.txt, nomad-lab (pyproject.toml)
-tenacity==8.3.0           # via plotly, -r requirements.txt
+sympy==1.12               # via -r requirements.txt, findiff, hyperspy, pymatgen, radioactivedecay
+tables==3.9.2             # via -r requirements.txt, ifes-apt-tc-data-modeling
+tabulate==0.8.9           # via -r requirements.txt, nomad-lab (pyproject.toml), pybis, pymatgen
+tenacity==8.3.0           # via -r requirements.txt, plotly
 termcolor==2.4.0          # via mkdocs-macros-plugin
-texttable==1.7.0          # via pybis, -r requirements.txt
-threadpoolctl==3.5.0      # via mdanalysis, scikit-learn, -r requirements.txt
-tifffile==2024.5.22       # via h5grove, scikit-image, -r requirements.txt
-tomli==2.0.1              # via build, mypy, sphinx, -r requirements.txt
-toolz==0.12.1             # via dask, partd, -r requirements.txt
+terminado==0.18.1         # via -r requirements.txt, jupyter-server, jupyter-server-terminals
+texttable==1.7.0          # via -r requirements.txt, pybis
+threadpoolctl==3.5.0      # via -r requirements.txt, mdanalysis, scikit-learn
+tifffile==2024.5.22       # via -r requirements.txt, h5grove, hyperspy, scikit-image
+tinycss2==1.3.0           # via -r requirements.txt, nbconvert
+tomli==2.0.1              # via -r requirements.txt, build, jupyterlab, mypy, sphinx
+toolz==0.12.1             # via -r requirements.txt, dask, hyperspy, partd
 toposort==1.10            # via -r requirements.txt, nomad-lab (pyproject.toml)
-tornado==6.4              # via jupyterhub, -r requirements.txt
-tqdm==4.66.4              # via diffsims, hyperspy, kikuchipy, mdanalysis, orix, pyedr, pymatgen, pyxem, twine, -r requirements.txt
-traitlets==5.14.3         # via ipython, jupyter-telemetry, jupyterhub, matplotlib-inline, -r requirements.txt
-traits==6.4.3             # via hyperspy, pyxem, -r requirements.txt
-transforms3d==0.4.1       # via diffsims, pyxem, -r requirements.txt
+tornado==6.4              # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, jupyterlab, notebook, terminado
+tqdm==4.66.4              # via -r requirements.txt, diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pyedr, pymatgen, pyxem, twine
+traitlets==5.14.3         # via -r requirements.txt, comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-console, jupyter-core, jupyter-events, jupyter-server, jupyter-telemetry, jupyterhub, jupyterlab, matplotlib-inline, nbclient, nbconvert, nbformat, qtconsole
+traits==6.4.3             # via -r requirements.txt, hyperspy, pyxem
+transforms3d==0.4.1       # via -r requirements.txt, diffsims, pyxem
 twine==3.4.2              # via nomad-lab (pyproject.toml)
 typed-ast==1.5.5          # via nomad-lab (pyproject.toml)
-types-python-dateutil==2.9.0.20240316  # via arrow, -r requirements.txt
-typing-extensions==4.11.0  # via alembic, anyio, asgiref, astroid, fastapi, ipython, jwcrypto, kombu, mypy, pydantic, sqlalchemy, starlette, uvicorn, -r requirements.txt
-typish==1.9.3             # via nptyping, -r requirements.txt
-tzdata==2024.1            # via celery, pytz-deprecation-shim, -r requirements.txt
-tzlocal==4.3              # via nionswift, pynxtools, -r requirements.txt
-uncertainties==3.1.7      # via lmfit, pymatgen, -r requirements.txt
+types-python-dateutil==2.9.0.20240316  # via -r requirements.txt, arrow
+typing-extensions==4.12.0  # via -r requirements.txt, alembic, anyio, asgiref, astroid, async-lru, fastapi, ipython, jwcrypto, kombu, mypy, pydantic, sqlalchemy, starlette, uvicorn
+typish==1.9.3             # via -r requirements.txt, nptyping
+tzdata==2024.1            # via -r requirements.txt, celery
+tzlocal==5.2              # via -r requirements.txt, nionswift, pynxtools-em
+uncertainties==3.1.7      # via -r requirements.txt, lmfit, pymatgen
 unidecode==1.3.2          # via -r requirements.txt, nomad-lab (pyproject.toml)
-uri-template==1.3.0       # via jsonschema, -r requirements.txt
-urllib3==1.26.18          # via docker, elasticsearch, pybis, requests, -r requirements.txt
+uri-template==1.3.0       # via -r requirements.txt, jsonschema
+urllib3==1.26.18          # via -r requirements.txt, docker, elasticsearch, pybis, requests
 uv==0.2.2                 # via nomad-lab (pyproject.toml)
-uvicorn==0.29.0           # via h5grove, -r requirements.txt, nomad-lab (pyproject.toml)
-uvloop==0.19.0            # via uvicorn, -r requirements.txt
+uvicorn[standard]==0.29.0  # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml)
+uvloop==0.19.0            # via -r requirements.txt, uvicorn
 validators==0.18.2        # via -r requirements.txt, nomad-lab (pyproject.toml)
-vine==5.1.0               # via amqp, celery, kombu, -r requirements.txt
-watchdog==4.0.0           # via mkdocs
-watchfiles==0.21.0        # via uvicorn, -r requirements.txt
-wcwidth==0.2.13           # via prettytable, prompt-toolkit, pytest, -r requirements.txt
-webcolors==1.13           # via jsonschema, -r requirements.txt
-webencodings==0.5.1       # via html5lib, -r requirements.txt
-websockets==12.0          # via uvicorn, -r requirements.txt
-werkzeug==3.0.3           # via flask, -r requirements.txt
+vine==5.1.0               # via -r requirements.txt, amqp, celery, kombu
+watchdog==4.0.1           # via mkdocs
+watchfiles==0.21.0        # via -r requirements.txt, uvicorn
+wcwidth==0.2.13           # via -r requirements.txt, prettytable, prompt-toolkit, pytest
+webcolors==1.13           # via -r requirements.txt, jsonschema
+webencodings==0.5.1       # via -r requirements.txt, bleach, html5lib, tinycss2
+websocket-client==1.8.0   # via -r requirements.txt, jupyter-server
+websockets==12.0          # via -r requirements.txt, uvicorn
+werkzeug==3.0.3           # via -r requirements.txt, flask
+widgetsnbextension==4.0.10  # via -r requirements.txt, ipywidgets
 wrapt==1.16.0             # via -r requirements.txt, nomad-lab (pyproject.toml)
-xarray==2023.12.0         # via pynxtools, pynxtools-mpes, pynxtools-xps, -r requirements.txt, nomad-lab (pyproject.toml)
-zarr==2.17.1              # via pyxem, -r requirements.txt
-zipfile37==0.1.3          # via pynxtools, -r requirements.txt
-zipp==3.18.2              # via importlib-metadata, importlib-resources, -r requirements.txt
+xarray==2023.12.0         # via -r requirements.txt, nomad-lab (pyproject.toml), pynxtools, pynxtools-mpes, pynxtools-xps
+xmltodict==0.13.0         # via -r requirements.txt, ifes-apt-tc-data-modeling, pynxtools-em
+xraydb==4.5.4             # via -r requirements.txt, pynxtools-em
+zarr==2.17.1              # via -r requirements.txt, hyperspy
+zipp==3.18.2              # via -r requirements.txt, importlib-metadata, importlib-resources
 zipstream-new==1.1.5      # via -r requirements.txt, nomad-lab (pyproject.toml)
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/requirements.txt b/requirements.txt
index f16f9bb343..f9954581b9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,58 +1,73 @@
-# This file was autogenerated by uv via the following command:
-#    uv pip compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml pyproject.toml
+#
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
+#
+#    pip-compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt --pip-args='--prefer-binary' dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml pyproject.toml
+#
 alabaster==0.7.16         # via sphinx
 alembic==1.13.1           # via jupyterhub
 amqp==5.2.0               # via kombu
 aniso8601==9.0.1          # via nomad-lab (pyproject.toml)
-anyio==4.3.0              # via httpx, starlette, watchfiles
+anyio==4.3.0              # via httpx, jupyter-server, starlette, watchfiles
+anytree==2.12.1           # via pynxtools
+appnope==0.1.4            # via ipykernel
+argon2-cffi==23.1.0       # via jupyter-server
+argon2-cffi-bindings==21.2.0  # via argon2-cffi
 arrow==1.3.0              # via isoduration
 asciitree==0.3.3          # via zarr
-ase==3.19.3               # via asr, ifes-apt-tc-data-modeling, matid, pynxtools, quippy-ase, nomad-lab (pyproject.toml)
+ase==3.19.3               # via asr, ifes-apt-tc-data-modeling, matid, nomad-lab (pyproject.toml), pynxtools, quippy-ase
 asgiref==3.8.1            # via nomad-lab (pyproject.toml)
 asr==0.4.1                # via nomad-lab (pyproject.toml)
-asteval==0.9.32           # via lmfit
+asteval==0.9.33           # via lmfit
 asttokens==2.4.1          # via stack-data
 async-generator==1.10     # via jupyterhub
+async-lru==2.0.4          # via jupyterlab
 attrs==23.2.0             # via jsonschema
-babel==2.15.0             # via sphinx
+babel==2.15.0             # via jupyterlab-server, sphinx
 bagit==1.8.1              # via nomad-lab (pyproject.toml)
 basicauth==0.4.1          # via nomad-lab (pyproject.toml)
-beautifulsoup4==4.12.3    # via nomad-lab (pyproject.toml)
+beautifulsoup4==4.12.3    # via nbconvert, nomad-lab (pyproject.toml)
 billiard==4.2.0           # via celery
 biopython==1.83           # via mdanalysis
-bitarray==2.9.2           # via nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nomad-lab (pyproject.toml)
+bitarray==2.9.2           # via nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml)
+bleach==6.1.0             # via nbconvert
 blinker==1.8.2            # via flask
 blosc2==2.5.1             # via tables
 cachetools==5.3.3         # via nomad-lab (pyproject.toml)
 celery==5.4.0             # via nomad-lab (pyproject.toml)
 certifi==2024.2.2         # via elasticsearch, httpcore, httpx, netcdf4, requests
 certipy==0.1.3            # via jupyterhub
-cffi==1.16.0              # via cryptography
+cffi==1.16.0              # via argon2-cffi-bindings, cryptography
 cftime==1.6.3             # via netcdf4
 charset-normalizer==3.3.2  # via requests
-click==8.1.7              # via asr, celery, click-didyoumean, click-plugins, click-repl, dask, flask, pynxtools, uvicorn, nomad-lab (pyproject.toml)
+click==8.1.7              # via asr, celery, click-default-group, click-didyoumean, click-plugins, click-repl, dask, flask, nomad-lab (pyproject.toml), pynxtools, uvicorn
+click-default-group==1.2.4  # via pynxtools
 click-didyoumean==0.3.1   # via celery
 click-plugins==1.1.1      # via celery
 click-repl==0.3.0         # via celery
-cloudpickle==3.0.0        # via dask, hyperspy
+cloudpickle==3.0.0        # via dask
+comm==0.2.2               # via ipykernel, ipywidgets
 commonmark==0.9.1         # via recommonmark
 contourpy==1.2.1          # via matplotlib
 cryptography==42.0.7      # via jwcrypto, pyjwt, pyopenssl, rfc3161ng
 cycler==0.12.1            # via matplotlib
-dask==2024.5.1            # via hyperspy, kikuchipy, orix, pyxem, rosettasciio
-decorator==5.1.1          # via ipython, validators
+dask[array]==2024.5.1     # via hyperspy, kikuchipy, orix, pyxem, rosettasciio
+debugpy==1.8.1            # via ipykernel
+decorator==5.1.1          # via ipyparallel, ipython, validators
+defusedxml==0.7.1         # via nbconvert
 deprecation==2.1.0        # via python-keycloak
 diffpy-structure==3.1.0   # via diffsims, kikuchipy, orix
 diffsims==0.5.2           # via kikuchipy, pyxem
-dill==0.3.8               # via lmfit
+dill==0.3.8               # via hyperspy, lmfit
 dnspython==2.6.1          # via email-validator, pymongo
-docker==7.0.0             # via dockerspawner
+docker==7.1.0             # via dockerspawner
 dockerspawner==13.0.0     # via nomad-lab (pyproject.toml)
 docstring-parser==0.16    # via nomad-lab (pyproject.toml)
 docutils==0.21.2          # via m2r, recommonmark, sphinx
 elasticsearch==7.17.1     # via elasticsearch-dsl, nomad-lab (pyproject.toml)
 elasticsearch-dsl==7.4.0  # via nomad-lab (pyproject.toml)
 email-validator==1.3.1    # via optimade
+entrypoints==0.4          # via ipyparallel
 escapism==1.0.1           # via dockerspawner
 et-xmlfile==1.1.0         # via openpyxl
 exceptiongroup==1.2.1     # via anyio, ipython
@@ -61,51 +76,70 @@ f90wrap==0.2.14           # via quippy-ase
 fabio==2024.4.0           # via pyfai, silx
 fastapi==0.99.1           # via h5grove, nomad-lab (pyproject.toml)
 fasteners==0.19           # via mdanalysis, zarr
+fastjsonschema==2.19.1    # via nbformat
 filelock==3.3.1           # via nomad-lab (pyproject.toml)
 findiff==0.10.0           # via pynxtools-stm
 flask==3.0.3              # via asr
-flatdict==4.0.1           # via pynxtools
+flatdict==3.4.0           # via ifes-apt-tc-data-modeling, pynxtools-em
 fonttools==4.51.0         # via matplotlib
 fqdn==1.5.1               # via jsonschema
-fsspec==2024.5.0          # via dask
+fsspec==2024.5.0          # via dask, hyperspy
 future==1.0.0             # via uncertainties
 gitdb==4.0.11             # via gitpython
-gitpython==3.1.43         # via pynxtools, nomad-lab (pyproject.toml)
+gitpython==3.1.43         # via nomad-lab (pyproject.toml)
 greenlet==3.0.3           # via sqlalchemy
 griddataformats==1.0.2    # via mdanalysis
 gsd==3.2.1                # via mdanalysis
 gunicorn==21.2.0          # via nomad-lab (pyproject.toml)
 h11==0.14.0               # via httpcore, uvicorn
-h5grove==1.3.0            # via nomad-lab (pyproject.toml)
-h5py==3.11.0              # via fabio, h5grove, hdf5plugin, ifes-apt-tc-data-modeling, kikuchipy, nionswift, orix, phonopy, pyfai, pynxtools, pynxtools-mpes, pynxtools-xps, pyxem, rosettasciio, silx, nomad-lab (pyproject.toml)
+h5grove[fastapi]==1.3.0   # via jupyterlab-h5web, nomad-lab (pyproject.toml)
+h5py==3.11.0              # via fabio, h5grove, hdf5plugin, hyperspy, ifes-apt-tc-data-modeling, jupyterlab-h5web, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, pynxtools, pynxtools-mpes, pynxtools-xps, pyxem, silx
 hdf5plugin==4.4.0         # via fabio
 hjson==3.1.0              # via nomad-lab (pyproject.toml)
 html5lib==1.1             # via nomad-lab (pyproject.toml)
 httpcore==1.0.5           # via httpx
 httptools==0.6.1          # via uvicorn
-httpx==0.27.0             # via nomad-lab (pyproject.toml)
-hyperspy==2.1.0           # via kikuchipy, pynxtools, pyxem
+httpx==0.27.0             # via jupyterlab, nomad-lab (pyproject.toml)
+hyperspy==1.7.6           # via kikuchipy, pyxem
 idna==3.7                 # via anyio, email-validator, httpx, jsonschema, requests
-ifes-apt-tc-data-modeling==0.1  # via pynxtools
-imageio==2.34.1           # via kikuchipy, nionswift, nionswift-io, nionui, scikit-image
+ifes-apt-tc-data-modeling==0.2.2  # via pynxtools-apm
+igor2==0.5.2              # via pynxtools-xps
+imageio==2.27.0           # via hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image
 imagesize==1.4.1          # via sphinx
-importlib-metadata==7.1.0  # via dask, flask, hyperspy, jupyterhub, pynxtools, sphinx, nomad-lab (pyproject.toml)
+importlib-metadata==7.1.0  # via dask, flask, hyperspy, jupyter-client, jupyter-lsp, jupyterhub, jupyterlab, jupyterlab-server, nbconvert, nomad-lab (pyproject.toml), pynxtools, sphinx
 importlib-resources==6.4.0  # via matplotlib, spglib
 inflection==0.5.1         # via nomad-lab (pyproject.toml)
-ipython==8.18.1           # via pynxtools-stm
+ipykernel==6.29.4         # via ipyparallel, jupyter, jupyter-console, jupyterlab, qtconsole
+ipyparallel==8.8.0        # via hyperspy
+ipython==8.18.1           # via hyperspy, ipykernel, ipyparallel, ipywidgets, jupyter-console, pynxtools-xrd
+ipywidgets==8.1.2         # via jupyter
 isodate==0.6.1            # via rdflib
 isoduration==20.11.0      # via jsonschema
 itsdangerous==2.2.0       # via flask, nomad-lab (pyproject.toml)
 jedi==0.19.1              # via ipython
-jinja2==3.1.4             # via flask, hyperspy, jupyterhub, sphinx
+jinja2==3.1.4             # via flask, hyperspy, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, nbconvert, sphinx
 jmespath==1.0.1           # via nomad-lab (pyproject.toml)
 joblib==1.4.2             # via mdanalysis, pymatgen, scikit-learn
+json5==0.9.25             # via jupyterlab-server
 jsonpointer==2.4          # via jsonschema
-jsonschema==4.17.3        # via jupyter-telemetry, oauthenticator, nomad-lab (pyproject.toml)
+jsonschema[format,format-nongpl]==4.17.3  # via jupyter-events, jupyter-telemetry, jupyterlab-server, nbformat, nomad-lab (pyproject.toml), oauthenticator
+jupyter==1.0.0            # via ifes-apt-tc-data-modeling
+jupyter-client==8.6.2     # via ipykernel, ipyparallel, jupyter-console, jupyter-server, nbclient, qtconsole
+jupyter-console==6.6.3    # via jupyter
+jupyter-core==5.7.2       # via ipykernel, jupyter-client, jupyter-console, jupyter-server, jupyterlab, nbclient, nbconvert, nbformat, qtconsole
+jupyter-events==0.5.0     # via jupyter-server
+jupyter-lsp==2.2.5        # via jupyterlab
+jupyter-server==2.5.0     # via jupyter-lsp, jupyterlab, jupyterlab-h5web, jupyterlab-server, notebook, notebook-shim
+jupyter-server-terminals==0.5.3  # via jupyter-server
 jupyter-telemetry==0.1.0  # via jupyterhub
-jupyterhub==4.0.2         # via dockerspawner, oauthenticator, nomad-lab (pyproject.toml)
+jupyterhub==4.0.2         # via dockerspawner, nomad-lab (pyproject.toml), oauthenticator
+jupyterlab==4.1.6         # via ifes-apt-tc-data-modeling, notebook
+jupyterlab-h5web==11.1.0  # via ifes-apt-tc-data-modeling
+jupyterlab-pygments==0.3.0  # via nbconvert
+jupyterlab-server==2.24.0  # via jupyterlab, notebook
+jupyterlab-widgets==3.0.10  # via ipywidgets
 jwcrypto==1.5.6           # via python-keycloak
-kikuchipy==0.8.7          # via pynxtools
+kikuchipy==0.9.0          # via pynxtools-em
 kiwisolver==1.4.5         # via matplotlib
 kombu==5.3.7              # via celery
 lark==1.1.9               # via optimade
@@ -113,68 +147,75 @@ latexcodec==3.0.0         # via pybtex
 llvmlite==0.42.0          # via numba
 lmfit==1.3.1              # via pyxem
 locket==1.0.0             # via partd
-lxml==5.2.2               # via fabio, lxml-html-clean, nomad-lab (pyproject.toml)
+lxml==5.2.2               # via fabio, lxml-html-clean, nomad-lab (pyproject.toml), pynxtools
 lxml-html-clean==0.1.1    # via nomad-lab (pyproject.toml)
 m2r==0.2.1                # via nomad-lab (pyproject.toml)
 mako==1.3.5               # via alembic
-markupsafe==2.1.5         # via jinja2, mako, werkzeug
+markupsafe==2.1.5         # via jinja2, mako, nbconvert, werkzeug
 matid==2.0.1              # via nomad-lab (pyproject.toml)
 matplotlib==3.8.4         # via ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay
-matplotlib-inline==0.1.7  # via ipython
+matplotlib-inline==0.1.7  # via ipykernel, ipython
 matplotlib-scalebar==0.8.1  # via orix
 mda-xdrlib==0.2.0         # via pyedr
 mdanalysis==2.5.0         # via nomad-lab (pyproject.toml)
 mergedeep==1.3.4          # via pynxtools
-mistune==3.0.2            # via m2r
+mistune==3.0.2            # via m2r, nbconvert
 mmtf-python==1.1.3        # via mdanalysis
 mongoengine==0.28.2       # via nomad-lab (pyproject.toml)
 mongomock==4.1.2          # via optimade
-monty==2024.5.15          # via pymatgen
+monty==2024.5.24          # via pymatgen
 mpmath==1.3.0             # via sympy
 mrcfile==1.5.0            # via griddataformats
 msgpack==1.0.8            # via blosc2, mmtf-python, nomad-lab (pyproject.toml)
 natsort==8.4.0            # via hyperspy
+nbclient==0.10.0          # via nbconvert
+nbconvert==7.16.4         # via jupyter, jupyter-server
+nbformat==5.10.4          # via jupyter-server, nbclient, nbconvert
 ndindex==1.8              # via blosc2
+nest-asyncio==1.6.0       # via ipykernel
 netcdf4==1.6.5            # via nomad-lab (pyproject.toml)
-networkx==2.6.3           # via matid, mdanalysis, pymatgen, radioactivedecay, scikit-image, nomad-lab (pyproject.toml)
+networkx==2.6.3           # via matid, mdanalysis, nomad-lab (pyproject.toml), pymatgen, radioactivedecay, scikit-image
 niondata==0.15.5          # via nionswift, nionswift-io
-nionswift==0.16.8         # via pynxtools
+nionswift==0.16.8         # via pynxtools-em
 nionswift-io==0.15.1      # via nionswift
 nionui==0.6.11            # via nionswift
 nionutils==0.4.10         # via niondata, nionswift, nionswift-io, nionui
+notebook==7.1.3           # via jupyter
+notebook-shim==0.2.4      # via jupyterlab, notebook
 nptyping==1.4.4           # via nomad-lab (pyproject.toml)
-numba==0.59.1             # via diffsims, kikuchipy, orix, pyxem
+numba==0.59.1             # via diffsims, hyperspy, kikuchipy, orix, pyxem, sparse
 numcodecs==0.12.1         # via zarr
-numexpr==2.10.0           # via pyfai, pyxem, tables
-numpy==1.22.4             # via ase, biopython, blosc2, cftime, contourpy, dask, diffsims, f90wrap, fabio, findiff, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pycifrw, pyedr, pyfai, pymatgen, pynxtools, pywavelets, pyxem, quippy-ase, radioactivedecay, rdkit, rosettasciio, scikit-image, scikit-learn, scipy, shapely, silx, spglib, tables, tifffile, xarray, zarr, nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nomad-lab (pyproject.toml)
+numexpr==2.10.0           # via hyperspy, pyfai, pyxem, tables
+numpy==1.22.4             # via ase, biopython, blosc2, cftime, contourpy, dask, diffsims, f90wrap, fabio, findiff, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, igor2, imageio, kikuchipy, lmfit, matid, matplotlib, mdanalysis, mrcfile, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nomad_dos_fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pycifrw, pyedr, pyfai, pymatgen, pynxtools, pywavelets, pyxem, quippy-ase, radioactivedecay, rdkit, rosettasciio, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tables, tifffile, xarray, xraydb, zarr
 numpy-quaternion==2023.0.3  # via orix
 oauthenticator==15.1.0    # via nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via jupyterhub
 openpyxl==3.1.2           # via nomad-lab (pyproject.toml)
-optimade==0.22.1          # via nomad-lab (pyproject.toml)
+optimade[mongo]==0.22.1   # via nomad-lab (pyproject.toml)
 orix==0.12.1.post0        # via diffsims, kikuchipy, pyxem
 orjson==3.10.3            # via h5grove, nomad-lab (pyproject.toml)
-packaging==24.0           # via dask, deprecation, docker, f90wrap, gunicorn, hyperspy, jupyterhub, matplotlib, mdanalysis, mongomock, pint, plotly, pooch, scikit-image, silx, sphinx, tables, xarray
+packaging==24.0           # via dask, deprecation, f90wrap, gunicorn, hyperspy, ipykernel, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mongomock, nbconvert, pint, plotly, pooch, qtconsole, qtpy, scikit-image, silx, sphinx, tables, xarray, xraydb
 palettable==3.3.3         # via pymatgen
 pamela==1.1.0             # via jupyterhub
-pandas==1.5.3             # via ifes-apt-tc-data-modeling, panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
+pandas==1.5.3             # via eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pybis, pymatgen, pynxtools, radioactivedecay, xarray
+pandocfilters==1.5.1      # via nbconvert
 panedr==0.8.0             # via nomad-lab (pyproject.toml)
 parmed==4.2.2             # via nomad-lab (pyproject.toml)
 parso==0.8.4              # via jedi
 partd==1.4.2              # via dask
 pexpect==4.9.0            # via ipython
 phonopy==2.23.1           # via asr
-pillow==10.3.0            # via fabio, imageio, matplotlib, nionswift, rdkit, scikit-image
-pint==0.17                # via hyperspy, rosettasciio, nomad-lab (pyproject.toml)
-platformdirs==4.2.2       # via pooch
+pillow==10.0.1            # via fabio, hyperspy, imageio, matplotlib, nionswift, rdkit, scikit-image
+pint==0.17                # via hyperspy, nomad-lab (pyproject.toml), pynxtools-xps, rosettasciio
+platformdirs==4.2.2       # via jupyter-core, pooch, xraydb
 plotly==5.22.0            # via asr, pymatgen
 ply==3.11                 # via pycifrw
-pooch==1.8.1              # via hyperspy, kikuchipy, orix, pyxem
+pooch==1.8.1              # via kikuchipy, orix
 prettytable==3.10.0       # via hyperspy
-prometheus-client==0.20.0  # via jupyterhub
-prompt-toolkit==3.0.43    # via click-repl, ipython
-psutil==5.9.8             # via diffsims, pyxem
-ptyprocess==0.7.0         # via pexpect
+prometheus-client==0.20.0  # via jupyter-server, jupyterhub
+prompt-toolkit==3.0.43    # via click-repl, ipython, jupyter-console
+psutil==5.9.8             # via diffsims, ipykernel, ipyparallel, pyxem
+ptyprocess==0.7.0         # via pexpect, terminado
 pure-eval==0.2.2          # via stack-data
 py-cpuinfo==9.0.0         # via blosc2, tables
 pyasn1==0.6.0             # via pyasn1-modules, rfc3161ng
@@ -183,60 +224,67 @@ pybis @ git+https://github.com/FAIRmat-NFDI/fairmat-pybis.git@91039c2a1df364c88a
 pybtex==0.24.0            # via pymatgen
 pycifrw==4.4.6            # via diffpy-structure
 pycparser==2.22           # via cffi
-pydantic==1.10.15         # via fastapi, optimade, nomad-lab (pyproject.toml)
+pydantic==1.10.15         # via fastapi, nomad-lab (pyproject.toml), optimade
 pyedr==0.8.0              # via panedr
-pyfai==2023.9.0           # via pyxem
-pygments==2.18.0          # via ipython, sphinx
-pyjwt==2.6.0              # via nomad-lab (pyproject.toml)
+pyfai==2024.5.0           # via pyxem
+pygments==2.18.0          # via ipython, jupyter-console, nbconvert, qtconsole, sphinx
+pyjwt[crypto]==2.6.0      # via nomad-lab (pyproject.toml)
 pymatgen==2023.9.25       # via asr, nomad-lab (pyproject.toml)
-pymongo==4.6.3            # via mongoengine, optimade, nomad-lab (pyproject.toml)
-pynxtools==0.1.1          # via pynxtools-mpes, pynxtools-stm, pynxtools-xps, nomad-lab (pyproject.toml)
+pymongo==4.6.3            # via mongoengine, nomad-lab (pyproject.toml), optimade
+pynxtools[apm,convert,ellips,em,mpes,stm,xps,xrd]==0.3.1  # via nomad-lab (pyproject.toml), pynxtools-apm, pynxtools-ellips, pynxtools-em, pynxtools-mpes, pynxtools-stm, pynxtools-xps, pynxtools-xrd
+pynxtools-apm==0.1.1      # via pynxtools
+pynxtools-ellips==0.0.2   # via pynxtools
+pynxtools-em==0.1.1       # via pynxtools
 pynxtools-mpes==0.0.3     # via pynxtools
-pynxtools-stm==1.0.1      # via pynxtools
-pynxtools-xps==0.0.3      # via pynxtools
+pynxtools-stm==1.0.4      # via pynxtools
+pynxtools-xps==0.2.2      # via pynxtools
+pynxtools-xrd==0.0.1      # via pynxtools
 pyopenssl==24.1.0         # via certipy
 pyparsing==3.1.2          # via matplotlib, rdflib
 pyrsistent==0.20.0        # via jsonschema
 python-box==6.1.0         # via rosettasciio
-python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, hyperspy, jupyterhub, matplotlib, pandas, pybis, rfc3161ng, rosettasciio
+python-dateutil==2.9.0.post0  # via arrow, celery, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, pandas, pybis, rfc3161ng, rosettasciio
 python-dotenv==1.0.1      # via uvicorn
-python-json-logger==2.0.2  # via jupyter-telemetry, nomad-lab (pyproject.toml)
+python-json-logger==2.0.2  # via jupyter-events, jupyter-telemetry, nomad-lab (pyproject.toml)
 python-keycloak==4.0.0    # via nomad-lab (pyproject.toml)
 python-logstash==0.4.6    # via nomad-lab (pyproject.toml)
 python-magic==0.4.24      # via nomad-lab (pyproject.toml)
 python-multipart==0.0.9   # via nomad-lab (pyproject.toml)
-pytz==2024.1              # via nionswift, pandas, pynxtools, nomad-lab (pyproject.toml)
-pytz-deprecation-shim==0.1.0.post0  # via tzlocal
+pytz==2024.1              # via nionswift, nomad-lab (pyproject.toml), pandas
 pywavelets==1.6.0         # via scikit-image
-pyxem==0.18.0             # via pynxtools
-pyyaml==6.0.1             # via dask, hyperspy, kikuchipy, phonopy, pybtex, pynxtools, pynxtools-mpes, rosettasciio, uvicorn, nomad-lab (pyproject.toml)
+pyxem==0.16.0             # via pynxtools-em
+pyyaml==6.0.1             # via dask, hyperspy, jupyter-events, kikuchipy, nomad-lab (pyproject.toml), phonopy, pybtex, pynxtools, pynxtools-mpes, rosettasciio, uvicorn
 pyzeo==0.1.5              # via nomad-lab (pyproject.toml)
+pyzmq==26.0.3             # via ipykernel, ipyparallel, jupyter-client, jupyter-console, jupyter-server, qtconsole
+qtconsole==5.5.2          # via jupyter
+qtpy==2.4.1               # via qtconsole
 quippy-ase==0.9.14        # via nomad-lab (pyproject.toml)
 radioactivedecay==0.5.0   # via ifes-apt-tc-data-modeling
 rdflib==5.0.0             # via nomad-lab (pyproject.toml)
 rdkit==2023.9.5           # via nomad-lab (pyproject.toml)
 recommonmark==0.7.1       # via nomad-lab (pyproject.toml)
-requests==2.32.2          # via docker, hyperspy, jupyterhub, oauthenticator, optimade, pooch, pybis, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), nomad-lab (pyproject.toml)
+requests==2.32.2          # via docker, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), hyperspy, jupyterhub, jupyterlab-server, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pybis, pymatgen, python-keycloak, requests-toolbelt, rfc3161ng, sphinx
 requests-toolbelt==1.0.0  # via python-keycloak
 rfc3161ng==2.1.3          # via nomad-lab (pyproject.toml)
 rfc3339-validator==0.1.4  # via jsonschema
+rfc3986-validator==0.1.1  # via jsonschema
 rfc3987==1.3.8            # via jsonschema
-rosettasciio==0.4         # via hyperspy
+rosettasciio==0.4         # via pynxtools-em
 ruamel-yaml==0.18.6       # via jupyter-telemetry, oauthenticator, pymatgen
 ruamel-yaml-clib==0.2.8   # via ruamel-yaml
 runstats==2.0.0           # via nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via hyperspy, kikuchipy, pyxem
-scikit-learn==1.5.0       # via kikuchipy, matid, pyxem, nomad-lab (pyproject.toml)
-scipy==1.13.1             # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, orix, pyfai, pymatgen, pynxtools, pyxem, radioactivedecay, scikit-image, scikit-learn, nomad-lab (pyproject.toml)
+scikit-learn==1.5.0       # via kikuchipy, matid, nomad-lab (pyproject.toml), pyxem
+scipy==1.13.1             # via ase, diffsims, findiff, griddataformats, hyperspy, kikuchipy, lmfit, matid, mdanalysis, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse, xraydb
+send2trash==1.8.3         # via jupyter-server
 sentinels==1.0.0          # via mongomock
-setuptools==70.0.0        # via radioactivedecay
-shapely==2.0.4            # via pyxem
 silx==2.1.0               # via pyfai
-six==1.16.0               # via asttokens, basicauth, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators
+six==1.16.0               # via anytree, asttokens, basicauth, bleach, diffpy-structure, elasticsearch-dsl, html5lib, isodate, pybtex, python-dateutil, rdflib, rfc3339-validator, validators
 smmap==5.0.1              # via gitdb
 sniffio==1.3.1            # via anyio, httpx
 snowballstemmer==2.2.0    # via sphinx
 soupsieve==2.5            # via beautifulsoup4
+sparse==0.15.4            # via hyperspy
 spglib==2.4.0             # via asr, matid, phonopy, pymatgen
 sphinx==7.3.7             # via recommonmark
 sphinxcontrib-applehelp==1.0.8  # via sphinx
@@ -245,47 +293,55 @@ sphinxcontrib-htmlhelp==2.0.5  # via sphinx
 sphinxcontrib-jsmath==1.0.1  # via sphinx
 sphinxcontrib-qthelp==1.0.7  # via sphinx
 sphinxcontrib-serializinghtml==1.1.10  # via sphinx
-sqlalchemy==2.0.30        # via alembic, jupyterhub
+sqlalchemy==2.0.30        # via alembic, jupyterhub, xraydb
 stack-data==0.6.3         # via ipython
 starlette==0.27.0         # via fastapi
 structlog==24.1.0         # via nomad-lab (pyproject.toml)
 sympy==1.12               # via findiff, hyperspy, pymatgen, radioactivedecay
 tables==3.9.2             # via ifes-apt-tc-data-modeling
-tabulate==0.8.9           # via pybis, pymatgen, nomad-lab (pyproject.toml)
+tabulate==0.8.9           # via nomad-lab (pyproject.toml), pybis, pymatgen
 tenacity==8.3.0           # via plotly
+terminado==0.18.1         # via jupyter-server, jupyter-server-terminals
 texttable==1.7.0          # via pybis
 threadpoolctl==3.5.0      # via mdanalysis, scikit-learn
-tifffile==2024.5.22       # via h5grove, scikit-image
-tomli==2.0.1              # via sphinx
-toolz==0.12.1             # via dask, partd
+tifffile==2024.5.22       # via h5grove, hyperspy, scikit-image
+tinycss2==1.3.0           # via nbconvert
+tomli==2.0.1              # via jupyterlab, sphinx
+toolz==0.12.1             # via dask, hyperspy, partd
 toposort==1.10            # via nomad-lab (pyproject.toml)
-tornado==6.4              # via jupyterhub
-tqdm==4.66.4              # via diffsims, hyperspy, kikuchipy, mdanalysis, orix, pyedr, pymatgen, pyxem
-traitlets==5.14.3         # via ipython, jupyter-telemetry, jupyterhub, matplotlib-inline
+tornado==6.4              # via ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, jupyterlab, notebook, terminado
+tqdm==4.66.4              # via diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pyedr, pymatgen, pyxem
+traitlets==5.14.3         # via comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-console, jupyter-core, jupyter-events, jupyter-server, jupyter-telemetry, jupyterhub, jupyterlab, matplotlib-inline, nbclient, nbconvert, nbformat, qtconsole
 traits==6.4.3             # via hyperspy, pyxem
 transforms3d==0.4.1       # via diffsims, pyxem
 types-python-dateutil==2.9.0.20240316  # via arrow
-typing-extensions==4.11.0  # via alembic, anyio, asgiref, fastapi, ipython, jwcrypto, kombu, pydantic, sqlalchemy, starlette, uvicorn
+typing-extensions==4.12.0  # via alembic, anyio, asgiref, async-lru, fastapi, ipython, jwcrypto, kombu, pydantic, sqlalchemy, starlette, uvicorn
 typish==1.9.3             # via nptyping
-tzdata==2024.1            # via celery, pytz-deprecation-shim
-tzlocal==4.3              # via nionswift, pynxtools
+tzdata==2024.1            # via celery
+tzlocal==5.2              # via nionswift, pynxtools-em
 uncertainties==3.1.7      # via lmfit, pymatgen
 unidecode==1.3.2          # via nomad-lab (pyproject.toml)
 uri-template==1.3.0       # via jsonschema
 urllib3==1.26.18          # via docker, elasticsearch, pybis, requests
-uvicorn==0.29.0           # via h5grove, nomad-lab (pyproject.toml)
+uvicorn[standard]==0.29.0  # via h5grove, nomad-lab (pyproject.toml)
 uvloop==0.19.0            # via uvicorn
 validators==0.18.2        # via nomad-lab (pyproject.toml)
 vine==5.1.0               # via amqp, celery, kombu
 watchfiles==0.21.0        # via uvicorn
 wcwidth==0.2.13           # via prettytable, prompt-toolkit
 webcolors==1.13           # via jsonschema
-webencodings==0.5.1       # via html5lib
+webencodings==0.5.1       # via bleach, html5lib, tinycss2
+websocket-client==1.8.0   # via jupyter-server
 websockets==12.0          # via uvicorn
 werkzeug==3.0.3           # via flask
+widgetsnbextension==4.0.10  # via ipywidgets
 wrapt==1.16.0             # via nomad-lab (pyproject.toml)
-xarray==2023.12.0         # via pynxtools, pynxtools-mpes, pynxtools-xps, nomad-lab (pyproject.toml)
-zarr==2.17.1              # via pyxem
-zipfile37==0.1.3          # via pynxtools
+xarray==2023.12.0         # via nomad-lab (pyproject.toml), pynxtools, pynxtools-mpes, pynxtools-xps
+xmltodict==0.13.0         # via ifes-apt-tc-data-modeling, pynxtools-em
+xraydb==4.5.4             # via pynxtools-em
+zarr==2.17.1              # via hyperspy
 zipp==3.18.2              # via importlib-metadata, importlib-resources
 zipstream-new==1.1.5      # via nomad-lab (pyproject.toml)
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff --git a/scripts/check_python_dependencies.sh b/scripts/check_python_dependencies.sh
index 276ed31737..f6aa37b5c1 100755
--- a/scripts/check_python_dependencies.sh
+++ b/scripts/check_python_dependencies.sh
@@ -14,6 +14,9 @@ project_dir=$(dirname $(dirname $(realpath $0)))
 
 cd $project_dir
 
+# do no support git install for pynxtools
+grep pynxtools pyproject.toml | grep "@git+" 1>&2
+
 # backup
 cp requirements.txt requirements.txt.tmp
 cp requirements-dev.txt requirements-dev.txt.tmp
diff --git a/scripts/setup_dev_env.sh b/scripts/setup_dev_env.sh
index 7a89bd96b7..23d14cec4e 100755
--- a/scripts/setup_dev_env.sh
+++ b/scripts/setup_dev_env.sh
@@ -17,7 +17,6 @@ rm -rf site
 
 # Install nomad
 pip install --prefer-binary -r requirements-dev.txt
-pip uninstall -y pynxtools
 pip install -e ".[infrastructure,parsing,dev]"
 
 # Build documentation
diff --git a/tests/data/parsers/nexus/SiO2onSi.ellips.nxs b/tests/data/parsers/nexus/SiO2onSi.ellips.nxs
index 31516e6ed681320a5223a7672ed75d116af7dcbe..dcb645cd9392c3ebff92dbeac5c690012c636f2b 100644
GIT binary patch
delta 90930
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

delta 6832
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
Pjvu1J(+NMMpMB>)b$g^L

-- 
GitLab