diff --git a/Dockerfile b/Dockerfile
index 7084a7029a94427835dbee9b334613a9de57e8e6..670321e788dfcc19215872851cb8dafca45f48a3 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 bd59789aa0ddc414002407951d51dbf9a3f24f80..5ec6ea6e0c1e5d06adaf69bb449ab0b7b58e8bcb 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 c3207ec08beca2549c830bc55f0c1a5a71b3cce6..0448da52e1a75f166e7379bb1cf12fb635f4bace 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 4fe00726f562b144a9500e294c1c082d59009517..6deac6fcb3570994dac602544c22d006eab23d63 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 ae8bcd2bd1ed92652ff045fa115548de0997ea01..4fb7155e2981421f63b2efebe8bb5b4d9b759cb2 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 80b9f0366470e0e702669096cae6d59da2eb6471..e9192c837ecbc7fb830c7d6be76e0cb9c817a4bd 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 81fdf44b1fbbd54b09b4c86f35d914cae37b0758..4ab8107ccf11d964e135f81cf3f5e2ee347d4dd7 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 759c263999bc16403c076ca844b291031bc299c4..81f116d89fba65e42f4b514df461f188e7921e99 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 23571ec71b6cf7d9681bdb857c094b1e41c4342d..ce34cebb61826b94e3dbb09f6ad443f8a412dac3 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 530b0633fea24cb2b442d543019663780ee6d028..ed29159b333811a78cd55bb86c819742d2f9b103 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 f16f9bb343c178f15c287bf7771a8840bd90a2f7..f9954581b968a15f47793704590dca35550a4578 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 276ed31737058d641120d39e7164d01469dfac69..f6aa37b5c165f29ed71cae32fad05612a442fc6e 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 7a89bd96b7ed8fdbb0135051f18e9620480acb7e..23d14cec4e10e438c1f2436e21c422d4cabe4093 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
Binary files a/tests/data/parsers/nexus/SiO2onSi.ellips.nxs and b/tests/data/parsers/nexus/SiO2onSi.ellips.nxs differ