From c7b976e4fbb0168e46f60df1e2111fdb29aa0640 Mon Sep 17 00:00:00 2001
From: Adam Fekete <adam@fekete.co.uk>
Date: Fri, 2 Dec 2022 23:09:02 +0000
Subject: [PATCH] Resolve "minor fixes for the pipeline" * removing `env.js`
 from the repository * removing `matid` dependency form the parser packages *
 converting python dependency check job into manual job

---
 .dockerignore                             |  11 +-
 .gitignore                                |   9 +-
 .gitlab-ci.yml                            |  11 +-
 Dockerfile                                |   6 +-
 MANIFEST.in                               |   3 +-
 dependencies/matid                        |   2 +-
 dependencies/parsers/electronic           |   2 +-
 docs/develop/setup.md                     |   9 +-
 gui/.vscode/settings.json                 |  19 -
 gui/src/components/conftest.spec.js       |   2 +-
 gui/src/metainfo.json                     | 523 +++++++++++++++-------
 gui/src/parserMetadata.json               |   4 +-
 gui/src/setupTests.js                     |   2 +-
 gui/{public => tests}/env.js              |   2 +-
 gui/tests/{nomad-test.yaml => nomad.yaml} |   0
 pyproject.toml                            |   2 -
 requirements-dev.txt                      |  17 +-
 requirements.txt                          |  17 +-
 scripts/build_sdist.sh                    |   1 -
 scripts/check_gui_artifacts.sh            |   5 +-
 scripts/generate_gui_artifacts.sh         |   3 +-
 scripts/generate_gui_config.sh            |  10 +
 22 files changed, 435 insertions(+), 225 deletions(-)
 delete mode 100644 gui/.vscode/settings.json
 rename gui/{public => tests}/env.js (99%)
 rename gui/tests/{nomad-test.yaml => nomad.yaml} (100%)
 create mode 100755 scripts/generate_gui_config.sh

diff --git a/.dockerignore b/.dockerignore
index 4559fa0445..85508f56ad 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -10,9 +10,6 @@ dependencies/**/tests
 dependencies/**/regtests
 dependencies/parsers/phonopy-library/example*
 
-# Ignore storage folders of docker-compose
-**/.volumes
-
 # ==============================================================================
 # The following part was geneterated based on the .gitignore
 
@@ -34,7 +31,8 @@ gui/junit.xml
 
 # Ignore all user-specific configuration files
 **/nomad.yaml
-!tests/nomad.yaml
+gui/public/env.js
+!gui/tests/nomad.yaml
 !ops/docker-compose/nomad-oasis/configs/nomad.yaml
 !ops/docker-compose/nomad-oasis-with-keycloak/configs/nomad.yaml
 
@@ -52,7 +50,12 @@ examples/workdir/
 **/jupyterhub.sqlite
 **/jupyterhub-proxy.pid
 
+# Ignore storage folders of docker-compose
+**/.volumes
 
+# local folder
+local
+tmp
 
 # https://github.com/github/gitignore/blob/main/Python.gitignore
 
diff --git a/.gitignore b/.gitignore
index 9ea5937418..5859277c48 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,8 @@ gui/junit.xml
 
 # Ignore all user-specific configuration files
 nomad.yaml
-!tests/nomad.yaml
+gui/public/env.js
+!gui/tests/nomad.yaml
 !ops/docker-compose/nomad-oasis/configs/nomad.yaml
 !ops/docker-compose/nomad-oasis-with-keycloak/configs/nomad.yaml
 
@@ -38,6 +39,10 @@ jupyterhub-proxy.pid
 # Ignore storage folders of docker-compose
 .volumes
 
+# local folder
+local
+tmp
+
 
 # https://github.com/github/gitignore/blob/main/Python.gitignore
 
@@ -428,5 +433,3 @@ $RECYCLE.BIN/
 # .nfs files are created when an open file is removed but is still being accessed
 .nfs*
 
-# local folder
-local
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 657c974346..a696a5f9ac 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -110,7 +110,7 @@ check python dependencies:
   rules:
     - if: $CI_COMMIT_TAG
       when: never
-    - when: on_success
+    - when: manual
       allow_failure: true
 
 
@@ -123,6 +123,12 @@ check gui artifacts:
     - cd /app
   script:
     - scripts/check_gui_artifacts.sh
+  after_script:
+    - >
+      if [ $CI_JOB_STATUS == 'failed' ]; then
+        echo 'Make sure that the right GUI artifacts have been regenerated and committed by running'
+        echo './scripts/generate_gui_artifacts.sh'
+      fi
   rules:
     - if: $CI_COMMIT_TAG
       when: never
@@ -170,8 +176,9 @@ gui tests:
   image: ${CI_REGISTRY_IMAGE}/dev_node:${DOCKER_TAG}
   variables:
     GIT_STRATEGY: none
-  script:
+  before_script:
     - cd /app/gui
+  script:
     - yarn test --ci --collectCoverage --reporters=default --reporters=jest-junit --silent
       --testPathIgnorePatterns=MetainfoBrowser.spec.js
       --testPathIgnorePatterns=src/components/entry/ArchiveEntryView.spec.js
diff --git a/Dockerfile b/Dockerfile
index eaa86aa527..3a7d4a690f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -109,22 +109,24 @@ COPY .pylintrc \
 
 # Files requiered for artifact generation/testing
 COPY ops/docker-compose ./ops/docker-compose
+
 COPY gui/src/metainfo.json ./gui/src/metainfo.json
 COPY gui/src/searchQuantities.json ./gui/src/searchQuantities.json
 COPY gui/src/toolkitMetadata.json ./gui/src/toolkitMetadata.json
 COPY gui/src/unitsData.js ./gui/src/unitsData.js
 COPY gui/src/parserMetadata.json ./gui/src/parserMetadata.json
-COPY gui/public/env.js ./gui/public/env.js
 COPY dependencies/nomad-remote-tools-hub/tools.json ./dependencies/nomad-remote-tools-hub/tools.json
 COPY gui/src/northTools.json ./gui/src/northTools.json
 COPY gui/src/exampleUploads.json ./gui/src/exampleUploads.json
 
+COPY gui/tests/nomad.yaml ./gui/tests/nomad.yaml
+COPY gui/tests/env.js ./gui/tests/env.js
+
 # build the example upload files
 RUN ./scripts/generate_example_uploads.sh
 
 # Copy the built gui code
 COPY --from=dev_node /app/gui/build nomad/app/static/gui
-RUN rm nomad/app/static/gui/env.js
 
 # Build documentation
 RUN --mount=source=.git,target=.git,type=bind pip install ".[parsing,infrastructure,dev]"
diff --git a/MANIFEST.in b/MANIFEST.in
index bba6e4815b..ecc6cecf72 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,10 +1,11 @@
 prune *
 exclude *
 
+recursive-include nomad *.py *.json *.j2 *.md *.txt metadata.yaml
 include pyproject.toml setup.py AUTHORS LICENSE README.md README.parsers.md requirements.txt requirements-dev.txt
 
-recursive-include nomad *.py *.json *.j2 *.md *.txt metadata.yaml
 graft nomad/app/static
+exclude nomad/app/static/gui/env.js
 recursive-exclude nomad/app/static *.map
 
 include dependencies/matid/README.md
diff --git a/dependencies/matid b/dependencies/matid
index c97f285949..f0c363777c 160000
--- a/dependencies/matid
+++ b/dependencies/matid
@@ -1 +1 @@
-Subproject commit c97f2859492265a46651fc0ca9f908db30b40911
+Subproject commit f0c363777c03948a08effbbe96e04a73121833ea
diff --git a/dependencies/parsers/electronic b/dependencies/parsers/electronic
index 74134f826a..74a2e6b243 160000
--- a/dependencies/parsers/electronic
+++ b/dependencies/parsers/electronic
@@ -1 +1 @@
-Subproject commit 74134f826a4508220424c52fc8bcbc8c392630d4
+Subproject commit 74a2e6b24389c8f364b9c378613a442b004c9af0
diff --git a/docs/develop/setup.md b/docs/develop/setup.md
index f6a84870a8..b419ea20a0 100644
--- a/docs/develop/setup.md
+++ b/docs/develop/setup.md
@@ -243,9 +243,14 @@ To run the worker directly with celery, do (from the root)
 celery -A nomad.processing worker -l info
 ```
 
-Before you can run the gui, make sure that generated artifacts have been created:
+Before you can run the gui, make sure that generated artifacts are up-to-date:
 ```sh
-./generate_gui_artifacts.sh
+./scripts/generate_gui_artifacts.sh
+```
+
+Also, make sure that the config file (`gui/public/env.js`) have been properly created:
+```sh
+./scripts/generate_gui_config.sh
 ```
 
 If you run the gui on its own (e.g. with react dev server below), you also have to have
diff --git a/gui/.vscode/settings.json b/gui/.vscode/settings.json
deleted file mode 100644
index 3a86e53cf5..0000000000
--- a/gui/.vscode/settings.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{   
-    "editor.rulers": [
-        90
-    ],
-    "editor.renderWhitespace": "all",
-    "editor.tabSize": 4,
-    "files.trimTrailingWhitespace": true,
-    "[javascript]": {
-        "editor.tabSize": 2
-    },
-    "files.exclude": {
-        "**/node_modules": true
-    },
-    "files.watcherExclude": {
-        "**": true,
-        "**/**": true
-    },
-    "jest.autoRun": "off"
-}
diff --git a/gui/src/components/conftest.spec.js b/gui/src/components/conftest.spec.js
index 35637c3bda..a355790a4d 100644
--- a/gui/src/components/conftest.spec.js
+++ b/gui/src/components/conftest.spec.js
@@ -325,7 +325,7 @@ let filepath
 const responseCapture = {}
 const readMode = process.env.READ_MODE || 'snapshot'
 const writeMode = process.env.WRITE_MODE || 'none'
-const configPath = 'gui/tests/nomad-test.yaml'
+const configPath = 'gui/tests/nomad.yaml'
 if (!fs.existsSync(`../${configPath}`)) {
   throw Error(`
     Could not find the NOMAD config file for testing at ../${configPath}. Note
diff --git a/gui/src/metainfo.json b/gui/src/metainfo.json
index 46f50c6f1d..d13e94b3e1 100644
--- a/gui/src/metainfo.json
+++ b/gui/src/metainfo.json
@@ -156,7 +156,7 @@
           "name": "HubbardModel",
           "description": "Setup of the Hubbard model used in DFT+U",
           "extending_sections": [
-            "/packages/37/section_definitions/25"
+            "/packages/37/section_definitions/26"
           ],
           "quantities": [
             {
@@ -259,7 +259,7 @@
           "description": "Contains method-related information about a kind of atom identified by label. This allows the assignment of an atom-centered basis set or pseudopotential for different\natoms belonging to the same kind.",
           "extending_sections": [
             "/packages/28/section_definitions/6",
-            "/packages/37/section_definitions/24",
+            "/packages/37/section_definitions/25",
             "/packages/45/section_definitions/65",
             "/packages/48/section_definitions/11",
             "/packages/14/section_definitions/8",
@@ -1113,6 +1113,9 @@
           "m_parent_sub_section": "section_definitions",
           "name": "GW",
           "description": "Section containing the various parameters that define a GW calculation.",
+          "extending_sections": [
+            "/packages/36/section_definitions/9"
+          ],
           "quantities": [
             {
               "m_def": "nomad.metainfo.metainfo.Quantity",
@@ -1826,8 +1829,8 @@
             "/packages/12/section_definitions/3",
             "/packages/34/section_definitions/2",
             "/packages/35/section_definitions/5",
-            "/packages/36/section_definitions/14",
-            "/packages/37/section_definitions/21",
+            "/packages/36/section_definitions/15",
+            "/packages/37/section_definitions/22",
             "/packages/38/section_definitions/6",
             "/packages/39/section_definitions/29",
             "/packages/40/section_definitions/2",
@@ -2751,8 +2754,8 @@
             "/packages/33/section_definitions/21",
             "/packages/12/section_definitions/0",
             "/packages/34/section_definitions/5",
-            "/packages/36/section_definitions/10",
-            "/packages/37/section_definitions/23",
+            "/packages/36/section_definitions/11",
+            "/packages/37/section_definitions/24",
             "/packages/38/section_definitions/4",
             "/packages/39/section_definitions/24",
             "/packages/42/section_definitions/11",
@@ -4374,7 +4377,7 @@
           "description": "This section stores information on a band structure evaluation along one-dimensional pathways in the $k$ or $q$ (reciprocal) space given in section_band_segment.\nEigenvalues calculated at the actual $k$-mesh used for energy_total evaluations,\ncan be found in the eigenvalues section.",
           "extending_sections": [
             "/packages/29/section_definitions/53",
-            "/packages/37/section_definitions/20",
+            "/packages/37/section_definitions/21",
             "/packages/45/section_definitions/63"
           ],
           "quantities": [
@@ -4519,6 +4522,9 @@
           "base_sections": [
             "/packages/2/section_definitions/1"
           ],
+          "extending_sections": [
+            "/packages/37/section_definitions/20"
+          ],
           "quantities": [
             {
               "m_def": "nomad.metainfo.metainfo.Quantity",
@@ -5924,7 +5930,7 @@
           "extending_sections": [
             "/packages/12/section_definitions/1",
             "/packages/34/section_definitions/3",
-            "/packages/36/section_definitions/13",
+            "/packages/36/section_definitions/14",
             "/packages/37/section_definitions/19",
             "/packages/38/section_definitions/5",
             "/packages/39/section_definitions/27",
@@ -5951,7 +5957,7 @@
             "/packages/33/section_definitions/22",
             "/packages/34/section_definitions/8",
             "/packages/35/section_definitions/8",
-            "/packages/36/section_definitions/9",
+            "/packages/36/section_definitions/10",
             "/packages/37/section_definitions/18",
             "/packages/39/section_definitions/25",
             "/packages/40/section_definitions/1",
@@ -6279,8 +6285,8 @@
             "/packages/32/section_definitions/330",
             "/packages/33/section_definitions/19",
             "/packages/12/section_definitions/2",
-            "/packages/36/section_definitions/15",
-            "/packages/37/section_definitions/22",
+            "/packages/36/section_definitions/16",
+            "/packages/37/section_definitions/23",
             "/packages/38/section_definitions/3",
             "/packages/39/section_definitions/26",
             "/packages/42/section_definitions/7",
@@ -288649,6 +288655,180 @@
           "m_def": "nomad.metainfo.metainfo.Section",
           "m_parent_index": 9,
           "m_parent_sub_section": "section_definitions",
+          "name": "GW",
+          "base_sections": [
+            "/packages/0/section_definitions/15"
+          ],
+          "extends_base_section": true,
+          "quantities": [
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 0,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_frequency_number",
+              "description": "Number referring to the frequency used in the calculation of the self energy.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "int32"
+              },
+              "shape": [
+                "n_frequencies"
+              ]
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 1,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_frequency_weights",
+              "description": "Weights of the frequency used in the calculation of the self energy.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [
+                "n_frequencies"
+              ]
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 2,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_frequency_grid_type",
+              "description": "Frequency integration grid type for the correlational self energy: 'eqdis' -\nequidistant frequencies from 0 to freqmax; 'gaulag' - Gauss-Laguerre quadrature\nfrom 0 to infinity; 'gauleg' - Gauss-Legendre quadrature from 0 to freqmax;\n'gaule2' (default) - double Gauss-Legendre quadrature from 0 to freqmax and from\nfreqmax to infinity.",
+              "type": {
+                "type_kind": "python",
+                "type_data": "str"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 3,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_max_frequency",
+              "description": "Maximum frequency for the calculation of the self energy.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 4,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_bare_coulomb_cutofftype",
+              "description": "Cutoff type for the calculation of the bare Coulomb potential: none, 0d, 1d, 2d.\nSee Rozzi et al., PRB 73, 205119 (2006)",
+              "type": {
+                "type_kind": "python",
+                "type_data": "str"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 5,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_bare_coulomb_gmax",
+              "description": "Maximum G for the pw basis for the Coulomb potential.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "1 / meter"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 6,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_mixed_basis_gmax",
+              "description": "Cut-off parameter for the truncation of the expansion of the plane waves in the\ninterstitial region.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "1 / meter"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 7,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_mixed_basis_lmax",
+              "description": "Maximum l value used for the radial functions within the muffin-tin.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "int32"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 8,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_mixed_basis_tolerance",
+              "description": "Eigenvalue threshold below which the egenvectors are discarded in the construction\nof the radial basis set.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 9,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_self_energy_c_number_of_poles",
+              "description": "Number of poles used in the analytical continuation.",
+              "type": {
+                "type_kind": "python",
+                "type_data": "int"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 10,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_self_energy_singularity_treatment",
+              "description": "Treatment of the integrable singular terms in the calculation of the self energy.\nValues: 'mpb' - Auxiliary function method by S. Massidda, M. Posternak, and A.\nBaldereschi, PRB 48, 5058 (1993); 'crg' - Auxiliary function method by P. Carrier,\nS. Rohra, and A. Goerling, PRB 75, 205126 (2007).",
+              "type": {
+                "type_kind": "python",
+                "type_data": "str"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 11,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_screened_coulomb_volume_average",
+              "description": "Type of volume averaging for the dynamically screened Coulomb potential: isotropic\n- Simple averaging along a specified direction using only diagonal components of\nthe dielectric tensor; anisotropic - Anisotropic screening by C. Freysoldt et al.,\nCPC 176, 1-13 (2007)",
+              "type": {
+                "type_kind": "python",
+                "type_data": "str"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 12,
+              "m_parent_sub_section": "quantities",
+              "name": "x_exciting_qp_equation_treatment",
+              "description": "Methods to solve the quasi-particle equation: 'linearization', 'self-consistent'",
+              "type": {
+                "type_kind": "python",
+                "type_data": "str"
+              },
+              "shape": []
+            }
+          ]
+        },
+        {
+          "m_def": "nomad.metainfo.metainfo.Section",
+          "m_parent_index": 10,
+          "m_parent_sub_section": "section_definitions",
           "name": "Calculation",
           "base_sections": [
             "/packages/2/section_definitions/34"
@@ -289663,7 +289843,7 @@
               "m_parent_index": 3,
               "m_parent_sub_section": "sub_sections",
               "name": "x_exciting_section_MT_charge_atom",
-              "sub_section": "/packages/36/section_definitions/11",
+              "sub_section": "/packages/36/section_definitions/12",
               "repeats": true
             },
             {
@@ -289671,14 +289851,14 @@
               "m_parent_index": 4,
               "m_parent_sub_section": "sub_sections",
               "name": "x_exciting_section_MT_moment_atom",
-              "sub_section": "/packages/36/section_definitions/12",
+              "sub_section": "/packages/36/section_definitions/13",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 10,
+          "m_parent_index": 11,
           "m_parent_sub_section": "section_definitions",
           "name": "System",
           "base_sections": [
@@ -290273,7 +290453,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 11,
+          "m_parent_index": 12,
           "m_parent_sub_section": "section_definitions",
           "name": "x_exciting_section_MT_charge_atom",
           "description": "atom-resolved charges in muffin tins",
@@ -290319,7 +290499,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 12,
+          "m_parent_index": 13,
           "m_parent_sub_section": "section_definitions",
           "name": "x_exciting_section_MT_moment_atom",
           "description": "atom-resolved moments in muffin tins",
@@ -290367,7 +290547,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 13,
+          "m_parent_index": 14,
           "m_parent_sub_section": "section_definitions",
           "name": "ScfIteration",
           "base_sections": [
@@ -290765,7 +290945,7 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_exciting_section_MT_charge_atom_scf_iteration",
-              "sub_section": "/packages/36/section_definitions/11",
+              "sub_section": "/packages/36/section_definitions/12",
               "repeats": true
             },
             {
@@ -290773,14 +290953,14 @@
               "m_parent_index": 1,
               "m_parent_sub_section": "sub_sections",
               "name": "x_exciting_section_MT_moment_atom_scf_iteration",
-              "sub_section": "/packages/36/section_definitions/12",
+              "sub_section": "/packages/36/section_definitions/13",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 14,
+          "m_parent_index": 15,
           "m_parent_sub_section": "section_definitions",
           "name": "Method",
           "base_sections": [
@@ -291466,7 +291646,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 15,
+          "m_parent_index": 16,
           "m_parent_sub_section": "section_definitions",
           "name": "Run",
           "base_sections": [
@@ -291927,7 +292107,7 @@
               "m_parent_index": 1,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_vdW_TS",
-              "sub_section": "/packages/37/section_definitions/17",
+              "sub_section": "/packages/37/section_definitions/14",
               "repeats": true
             }
           ]
@@ -292079,23 +292259,6 @@
           "m_def": "nomad.metainfo.metainfo.Section",
           "m_parent_index": 4,
           "m_parent_sub_section": "section_definitions",
-          "name": "x_fhi_aims_section_eigenvalues_group_perturbativeGW",
-          "description": "section for full list of eigenvalues for different spin and kpoints from a perturbative GW calculation",
-          "sub_sections": [
-            {
-              "m_def": "nomad.metainfo.metainfo.SubSection",
-              "m_parent_index": 0,
-              "m_parent_sub_section": "sub_sections",
-              "name": "x_fhi_aims_section_eigenvalues_spin_perturbativeGW",
-              "sub_section": "/packages/37/section_definitions/10",
-              "repeats": true
-            }
-          ]
-        },
-        {
-          "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 5,
-          "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_group_ZORA",
           "description": "section for full list of eigenvalues for different spin and kpoints of scaled ZORA",
           "sub_sections": [
@@ -292104,14 +292267,14 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_spin_ZORA",
-              "sub_section": "/packages/37/section_definitions/11",
+              "sub_section": "/packages/37/section_definitions/8",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 6,
+          "m_parent_index": 5,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_group",
           "description": "section for full list of eigenvalues for different spin and kpoints",
@@ -292121,100 +292284,14 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_spin",
-              "sub_section": "/packages/37/section_definitions/12",
+              "sub_section": "/packages/37/section_definitions/9",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 7,
-          "m_parent_sub_section": "section_definitions",
-          "name": "x_fhi_aims_section_eigenvalues_list_perturbativeGW",
-          "description": "section for one list of eigenvalues from a perturbative GW calculation",
-          "quantities": [
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 0,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_correlation_perturbativeGW",
-              "description": "Correlation energy at a given eigenstate from perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": [],
-              "unit": "joule"
-            },
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 1,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_ExactExchange_perturbativeGW",
-              "description": "Exact exchange energy at given eigenstate from perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": [],
-              "unit": "joule"
-            },
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 2,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_ks_ExchangeCorrelation",
-              "description": "KS exchange correlation energy at a given eigenstate needed to calculate the\nquasi-particle energy in perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": [],
-              "unit": "joule"
-            },
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 3,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_ks_GroundState",
-              "description": "KS ground state energy at a given eigenstate needed in perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": [],
-              "unit": "joule"
-            },
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 4,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_occupation_perturbativeGW",
-              "description": "Occupation of single eigenfunction of perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": []
-            },
-            {
-              "m_def": "nomad.metainfo.metainfo.Quantity",
-              "m_parent_index": 5,
-              "m_parent_sub_section": "quantities",
-              "name": "x_fhi_aims_eigenvalue_quasiParticle_energy",
-              "description": "Quasiparticle energy at a given eigenstate from perturbative GW",
-              "type": {
-                "type_kind": "numpy",
-                "type_data": "float64"
-              },
-              "shape": [],
-              "unit": "joule"
-            }
-          ]
-        },
-        {
-          "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 8,
+          "m_parent_index": 6,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_list_ZORA",
           "description": "section for one list of eigenvalues at specific kpoint and spin of scaled ZORA",
@@ -292248,7 +292325,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 9,
+          "m_parent_index": 7,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_list",
           "description": "section for one list of eigenvalues at specific kpoint and spin",
@@ -292282,14 +292359,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 10,
-          "m_parent_sub_section": "section_definitions",
-          "name": "x_fhi_aims_section_eigenvalues_spin_perturbativeGW",
-          "description": "section for one spin orientation from a perturbative GW calculation"
-        },
-        {
-          "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 11,
+          "m_parent_index": 8,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_spin_ZORA",
           "description": "section for one spin orientation of scaled ZORA",
@@ -292337,14 +292407,14 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_list_ZORA",
-              "sub_section": "/packages/37/section_definitions/8",
+              "sub_section": "/packages/37/section_definitions/6",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 12,
+          "m_parent_index": 9,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_spin",
           "description": "section for one spin orientation",
@@ -292392,7 +292462,7 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_list_perturbativeGW",
-              "sub_section": "/packages/37/section_definitions/7",
+              "sub_section": "/packages/37/section_definitions/16",
               "repeats": true
             },
             {
@@ -292400,14 +292470,14 @@
               "m_parent_index": 1,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_list",
-              "sub_section": "/packages/37/section_definitions/9",
+              "sub_section": "/packages/37/section_definitions/7",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 13,
+          "m_parent_index": 10,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_eigenvalues_ZORA",
           "description": "section for gathering eigenvalues of scaled ZORA",
@@ -292417,21 +292487,21 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_group_ZORA",
-              "sub_section": "/packages/37/section_definitions/5",
+              "sub_section": "/packages/37/section_definitions/4",
               "repeats": false
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 14,
+          "m_parent_index": 11,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_MD_detect",
           "description": "Section to detect MD immediately during parsing of controlInOut"
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 15,
+          "m_parent_index": 12,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_parallel_task_assignement",
           "description": "-",
@@ -292464,7 +292534,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 16,
+          "m_parent_index": 13,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_parallel_tasks",
           "description": "-",
@@ -292474,14 +292544,14 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_parallel_task_assignement",
-              "sub_section": "/packages/37/section_definitions/15",
+              "sub_section": "/packages/37/section_definitions/12",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 17,
+          "m_parent_index": 14,
           "m_parent_sub_section": "section_definitions",
           "name": "x_fhi_aims_section_vdW_TS",
           "description": "-",
@@ -292549,6 +292619,116 @@
             }
           ]
         },
+        {
+          "m_def": "nomad.metainfo.metainfo.Section",
+          "m_parent_index": 15,
+          "m_parent_sub_section": "section_definitions",
+          "name": "x_fhi_aims_section_eigenvalues_group_perturbativeGW",
+          "description": "section for full list of eigenvalues for different spin and kpoints from a perturbative GW calculation",
+          "sub_sections": [
+            {
+              "m_def": "nomad.metainfo.metainfo.SubSection",
+              "m_parent_index": 0,
+              "m_parent_sub_section": "sub_sections",
+              "name": "x_fhi_aims_section_eigenvalues_spin_perturbativeGW",
+              "sub_section": "/packages/37/section_definitions/17",
+              "repeats": true
+            }
+          ]
+        },
+        {
+          "m_def": "nomad.metainfo.metainfo.Section",
+          "m_parent_index": 16,
+          "m_parent_sub_section": "section_definitions",
+          "name": "x_fhi_aims_section_eigenvalues_list_perturbativeGW",
+          "description": "section for one list of eigenvalues from a perturbative GW calculation",
+          "quantities": [
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 0,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_correlation_perturbativeGW",
+              "description": "Correlation energy at a given eigenstate from perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "joule"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 1,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_ExactExchange_perturbativeGW",
+              "description": "Exact exchange energy at given eigenstate from perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "joule"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 2,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_ks_ExchangeCorrelation",
+              "description": "KS exchange correlation energy at a given eigenstate needed to calculate the\nquasi-particle energy in perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "joule"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 3,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_ks_GroundState",
+              "description": "KS ground state energy at a given eigenstate needed in perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "joule"
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 4,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_occupation_perturbativeGW",
+              "description": "Occupation of single eigenfunction of perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": []
+            },
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 5,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_eigenvalue_quasiParticle_energy",
+              "description": "Quasiparticle energy at a given eigenstate from perturbative GW",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "unit": "joule"
+            }
+          ]
+        },
+        {
+          "m_def": "nomad.metainfo.metainfo.Section",
+          "m_parent_index": 17,
+          "m_parent_sub_section": "section_definitions",
+          "name": "x_fhi_aims_section_eigenvalues_spin_perturbativeGW",
+          "description": "section for one spin orientation from a perturbative GW calculation"
+        },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
           "m_parent_index": 18,
@@ -292643,7 +292823,7 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_group_perturbativeGW",
-              "sub_section": "/packages/37/section_definitions/4",
+              "sub_section": "/packages/37/section_definitions/15",
               "repeats": false
             },
             {
@@ -292651,7 +292831,7 @@
               "m_parent_index": 1,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_ZORA",
-              "sub_section": "/packages/37/section_definitions/13",
+              "sub_section": "/packages/37/section_definitions/10",
               "repeats": false
             }
           ]
@@ -292862,7 +293042,7 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_eigenvalues_group",
-              "sub_section": "/packages/37/section_definitions/6",
+              "sub_section": "/packages/37/section_definitions/5",
               "repeats": false
             }
           ]
@@ -292871,6 +293051,31 @@
           "m_def": "nomad.metainfo.metainfo.Section",
           "m_parent_index": 20,
           "m_parent_sub_section": "section_definitions",
+          "name": "DosValues",
+          "base_sections": [
+            "/packages/2/section_definitions/16"
+          ],
+          "extends_base_section": true,
+          "quantities": [
+            {
+              "m_def": "nomad.metainfo.metainfo.Quantity",
+              "m_parent_index": 0,
+              "m_parent_sub_section": "quantities",
+              "name": "x_fhi_aims_normalization_factor_raw_data",
+              "description": "Normalization factor to reobtain the DOS values as presented in the raw data files.",
+              "type": {
+                "type_kind": "numpy",
+                "type_data": "float64"
+              },
+              "shape": [],
+              "default": 1
+            }
+          ]
+        },
+        {
+          "m_def": "nomad.metainfo.metainfo.Section",
+          "m_parent_index": 21,
+          "m_parent_sub_section": "section_definitions",
           "name": "BandStructure",
           "base_sections": [
             "/packages/2/section_definitions/14"
@@ -292941,7 +293146,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 21,
+          "m_parent_index": 22,
           "m_parent_sub_section": "section_definitions",
           "name": "Method",
           "base_sections": [
@@ -293549,14 +293754,14 @@
               "m_parent_index": 1,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_MD_detect",
-              "sub_section": "/packages/37/section_definitions/14",
+              "sub_section": "/packages/37/section_definitions/11",
               "repeats": true
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 22,
+          "m_parent_index": 23,
           "m_parent_sub_section": "section_definitions",
           "name": "Run",
           "base_sections": [
@@ -293669,14 +293874,14 @@
               "m_parent_index": 0,
               "m_parent_sub_section": "sub_sections",
               "name": "x_fhi_aims_section_parallel_tasks",
-              "sub_section": "/packages/37/section_definitions/16",
+              "sub_section": "/packages/37/section_definitions/13",
               "repeats": false
             }
           ]
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 23,
+          "m_parent_index": 24,
           "m_parent_sub_section": "section_definitions",
           "name": "System",
           "base_sections": [
@@ -293817,7 +294022,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 24,
+          "m_parent_index": 25,
           "m_parent_sub_section": "section_definitions",
           "name": "AtomParameters",
           "base_sections": [
@@ -293837,7 +294042,7 @@
         },
         {
           "m_def": "nomad.metainfo.metainfo.Section",
-          "m_parent_index": 25,
+          "m_parent_index": 26,
           "m_parent_sub_section": "section_definitions",
           "name": "HubbardModel",
           "base_sections": [
diff --git a/gui/src/parserMetadata.json b/gui/src/parserMetadata.json
index fe7558effc..12d90d03c4 100644
--- a/gui/src/parserMetadata.json
+++ b/gui/src/parserMetadata.json
@@ -265,10 +265,11 @@
     "codeUrl": "https://aimsclub.fhi-berlin.mpg.de/",
     "parserDirName": "dependencies/electronic/electronicparsers/fhi-aims/",
     "parserGitUrl": "https://github.com/nomad-coe/electronic-parsers.git",
+    "parserLastUpdate": "18.10.2022",
     "parserSpecific": "",
     "preamble": "",
     "status": "production",
-    "tableOfFiles": "|Input Filename| Description|\n|--- | --- |\n|`<text_file>` | **Mainfile**, plain text file w/arbitrary name, e.g.,  `<output,control, aims,...>.out` |\n|`control.in` | Runtime information |\n|`geometry.in` | Material's atomic-structure information,  |\n|AUX FILES| Description|\n|`<atoml_label>_l_proj_dos.out`|  Angular-momentum-resolved DOS @ Fermi Energy|\n|`<atoml_label>_l_proj_dos_raw.out`|  Angular-momentum-resolved DOS @ vacuum|\n|`KS_DOS_total.dat`| Kohn-Sham total DOS @ Fermi Energy |\n|`KS_DOS_total_raw.dat`| Kohn-Sham total DOS @ vacuum |\n|`Mulliken.out` **WARNING-->**|Mulliken charge analysis on all atoms. **WARNING** not yet read by NOMAD's parser|\n|`atom_proj_dos_<atom_name><index>_raw.dat`  | Atom-projected DOS @ vacuum|\n|`atom_projected_dos_<atom_name><index>.dat`  | Atom-projected DOS @ Fermi Energy|\n|`band<spin><segment>.out` | bandstructure file |\n"
+    "tableOfFiles": "|Input Filename| Description|\n|--- | --- |\n|`<text_file>` | **Mainfile**, plain text file w/arbitrary name, e.g.,  `<output,control, aims,...>.out` |\n|`control.in` | Runtime information |\n|`geometry.in` | Material's atomic-structure information,  |\n|AUX FILES| Description|\n|`<atoml_label>_l_proj_dos.out`|  Angular-momentum-resolved DOS @ Fermi Energy|\n|`<atoml_label>_l_proj_dos_raw.out`|  Angular-momentum-resolved DOS @ vacuum|\n|`KS_DOS_total.dat`| Kohn-Sham total DOS @ Fermi Energy |\n|`KS_DOS_total_raw.dat`| Kohn-Sham total DOS @ vacuum |\n|`Mulliken.out` **WARNING-->**|Mulliken charge analysis on all atoms. **WARNING** not yet read by NOMAD's parser|\n|`atom_proj_dos_<atom_name><index>_raw.dat`  | Atom-projected DOS @ vacuum|\n|`atom_projected_dos_<atom_name><index>.dat`  | Atom-projected DOS @ Fermi Energy|\n|`band<spin><segment>.out` | bandstructure file |\n|`GW_band<spin><segment>` | GW bandstructure file |\n"
   },
   "FHI-vibes": {
     "codeCategory": "Workflow manager",
@@ -742,6 +743,7 @@
     "codeUrl": "http://exciting-code.org/",
     "parserDirName": "dependencies/electronic/electronicparsers/exciting/",
     "parserGitUrl": "https://github.com/nomad-coe/electronic-parsers.git",
+    "parserLastUpdate": "18.10.2022",
     "parserSpecific": "",
     "preamble": "",
     "status": "production",
diff --git a/gui/src/setupTests.js b/gui/src/setupTests.js
index c769d63c0c..789bb5bf2d 100644
--- a/gui/src/setupTests.js
+++ b/gui/src/setupTests.js
@@ -20,7 +20,7 @@
 
 import { setupServer } from 'msw/node'
 import { configure } from '@testing-library/react'
-import "../public/env"
+import "../tests/env"
 import '@testing-library/jest-dom' // Adds convenient expect-methods
 
 /**
diff --git a/gui/public/env.js b/gui/tests/env.js
similarity index 99%
rename from gui/public/env.js
rename to gui/tests/env.js
index 888744463e..34bac3718d 100644
--- a/gui/public/env.js
+++ b/gui/tests/env.js
@@ -2,7 +2,7 @@ window.nomadEnv = {
   "appBase": "http://localhost:8000/fairdi/nomad/latest",
   "northBase": "http://localhost:9000/fairdi/nomad/latest/north",
   "keycloakBase": "https://nomad-lab.eu/fairdi/keycloak/auth/",
-  "keycloakRealm": "fairdi_nomad_prod",
+  "keycloakRealm": "fairdi_nomad_test",
   "keycloakClientId": "nomad_public",
   "debug": false,
   "encyclopediaBase": "https://nomad-lab.eu/prod/rae/encyclopedia/#",
diff --git a/gui/tests/nomad-test.yaml b/gui/tests/nomad.yaml
similarity index 100%
rename from gui/tests/nomad-test.yaml
rename to gui/tests/nomad.yaml
diff --git a/pyproject.toml b/pyproject.toml
index 8499fcb02a..c82f75636c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -48,8 +48,6 @@ parsing = [
     'h5py==3.6.0',
     'hjson==3.0.2',
     'scipy==1.7.1',
-    'scikit-learn==0.24.2',
-    'matid==0.6.1',
     'python-magic==0.4.24',
     'panedr==0.2',
     'parmed==3.0.0',
diff --git a/requirements-dev.txt b/requirements-dev.txt
index e305c73112..819ab47aa6 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -15,7 +15,7 @@ argon2-cffi==21.3.0       # via -r requirements.txt, jupyter-server
 argon2-cffi-bindings==21.2.0  # via -r requirements.txt, argon2-cffi
 arrow==1.2.3              # via -r requirements.txt, isoduration
 asciitree==0.3.3          # via -r requirements.txt, zarr
-ase==3.19.0               # via -r requirements.txt, asr, matid, matid (dependencies/matid/pyproject.toml), nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
+ase==3.19.0               # via -r requirements.txt, asr, matid (dependencies/matid/pyproject.toml), nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 asr==0.4.1                # via -r requirements.txt, nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml)
 astroid==2.5.1            # via nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pylint
 asttokens==2.1.0          # via devtools
@@ -44,7 +44,6 @@ certipy==0.1.3            # via -r requirements.txt, jupyterhub
 cffi==1.15.1              # via -r requirements.txt, argon2-cffi-bindings, bcrypt, cryptography
 cftime==1.6.2             # via -r requirements.txt, netcdf4
 charset-normalizer==2.0.12  # via -r requirements.txt, httpx, requests
-chronic==0.3.4            # via -r requirements.txt, matid
 click==8.1.3              # via -r requirements.txt, asr, flask, mkdocs, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pip-tools, uvicorn
 cloudpickle==2.2.0        # via -r requirements.txt, dask
 colorama==0.4.6           # via twine
@@ -82,7 +81,7 @@ flatdict==4.0.1           # via -r requirements.txt, nexusparser (dependencies/p
 fonttools==4.37.3         # via -r requirements.txt, matplotlib
 fqdn==1.5.1               # via -r requirements.txt, jsonschema
 fsspec==2022.11.0         # via -r requirements.txt, dask, hyperspy
-future==0.18.2            # via -r requirements.txt, matid, uncertainties
+future==0.18.2            # via -r requirements.txt, uncertainties
 ghp-import==2.1.0         # via mkdocs
 gitdb==4.0.9              # via -r requirements.txt, gitpython
 gitpython==3.1.24         # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -137,7 +136,6 @@ m2r==0.2.1                # via -r requirements.txt, nomad-lab (pyproject.toml)
 mako==1.2.4               # via -r requirements.txt, alembic
 markdown==3.4.1           # via mkdocs, mkdocs-material, pymdown-extensions
 markupsafe==2.1.1         # via -r requirements.txt, jinja2, mako, nbconvert, nomad-lab (pyproject.toml), werkzeug
-matid==0.6.1              # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml)
 matplotlib==3.5.3         # via -r requirements.txt, ase, asr, hyperspy, mdanalysis, phonopy, pymatgen
 matplotlib-inline==0.1.6  # via -r requirements.txt, ipykernel, ipython
 mccabe==0.6.1             # via pylint
@@ -167,12 +165,12 @@ nbconvert==7.2.5          # via -r requirements.txt, jupyter-server
 nbformat==5.7.0           # via -r requirements.txt, jupyter-server, nbclient, nbconvert
 nest-asyncio==1.5.6       # via -r requirements.txt, ipykernel, jupyter-client, nbclient
 netcdf4==1.5.4            # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml)
-networkx==2.6.3           # via -r requirements.txt, matid, matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, scikit-image
+networkx==2.6.3           # via -r requirements.txt, matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, scikit-image
 nptyping==1.4.4           # via -r requirements.txt, nomad-lab (pyproject.toml)
 numba==0.56.4             # via -r requirements.txt, hyperspy, sparse
 numcodecs==0.10.2         # via -r requirements.txt, zarr
 numexpr==2.8.4            # via -r requirements.txt, hyperspy
-numpy==1.21.2             # via -r requirements.txt, ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
+numpy==1.21.2             # via -r requirements.txt, ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
 oauthenticator==14.2.0    # via -r requirements.txt, nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via -r requirements.txt, jupyterhub
 openpyxl==3.0.9           # via -r requirements.txt, nomad-lab (pyproject.toml)
@@ -252,18 +250,17 @@ ruamel-yaml==0.17.21      # via -r requirements.txt, jupyter-telemetry, pymatgen
 ruamel-yaml-clib==0.2.7   # via -r requirements.txt, ruamel-yaml
 runstats==2.0.0           # via -r requirements.txt, nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via -r requirements.txt, hyperspy
-scikit-learn==0.24.2      # via -r requirements.txt, matid (dependencies/matid/pyproject.toml), nomad-lab (pyproject.toml)
-scipy==1.7.1              # via -r requirements.txt, ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
+scikit-learn==0.24.2      # via -r requirements.txt, matid (dependencies/matid/pyproject.toml)
+scipy==1.7.1              # via -r requirements.txt, ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
 send2trash==1.8.0         # via -r requirements.txt, jupyter-server
 sentinels==1.0.0          # via -r requirements.txt, mongomock
 six==1.16.0               # via -r requirements.txt, asttokens, astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, pytest, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
-sklearn==0.0.post1        # via -r requirements.txt, matid
 smmap==5.0.0              # via -r requirements.txt, gitdb
 sniffio==1.3.0            # via -r requirements.txt, anyio, httpcore, httpx
 snowballstemmer==2.2.0    # via -r requirements.txt, sphinx
 soupsieve==2.3.2.post1    # via -r requirements.txt, beautifulsoup4
 sparse==0.13.0            # via -r requirements.txt, hyperspy
-spglib==2.0.2             # via -r requirements.txt, asr, matid, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
+spglib==2.0.2             # via -r requirements.txt, asr, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
 sphinx==5.3.0             # via -r requirements.txt, recommonmark
 sphinxcontrib-applehelp==1.0.2  # via -r requirements.txt, sphinx
 sphinxcontrib-devhelp==1.0.2  # via -r requirements.txt, sphinx
diff --git a/requirements.txt b/requirements.txt
index d6990fc601..51b74dfa77 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -15,7 +15,7 @@ argon2-cffi==21.3.0       # via jupyter-server
 argon2-cffi-bindings==21.2.0  # via argon2-cffi
 arrow==1.2.3              # via isoduration
 asciitree==0.3.3          # via zarr
-ase==3.19.0               # via asr, matid, matid (dependencies/matid/pyproject.toml), nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
+ase==3.19.0               # via asr, matid (dependencies/matid/pyproject.toml), nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml)
 asr==0.4.1                # via nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml)
 astunparse==1.6.3         # via mdtraj
 async-generator==1.10     # via jupyterhub
@@ -40,7 +40,6 @@ certipy==0.1.3            # via jupyterhub
 cffi==1.15.1              # via argon2-cffi-bindings, bcrypt, cryptography
 cftime==1.6.2             # via netcdf4
 charset-normalizer==2.0.12  # via httpx, requests
-chronic==0.3.4            # via matid
 click==8.1.3              # via asr, flask, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), uvicorn
 cloudpickle==2.2.0        # via dask
 commonmark==0.9.1         # via recommonmark
@@ -73,7 +72,7 @@ flatdict==4.0.1           # via nexusparser (dependencies/parsers/nexus/pyprojec
 fonttools==4.37.3         # via matplotlib
 fqdn==1.5.1               # via jsonschema
 fsspec==2022.11.0         # via dask, hyperspy
-future==0.18.2            # via matid, uncertainties
+future==0.18.2            # via uncertainties
 gitdb==4.0.9              # via gitpython
 gitpython==3.1.24         # via nomad-lab (pyproject.toml)
 greenlet==2.0.1           # via sqlalchemy
@@ -122,7 +121,6 @@ lxml==4.7.1               # via atomisticparsers (dependencies/parsers/atomistic
 m2r==0.2.1                # via nomad-lab (pyproject.toml)
 mako==1.2.4               # via alembic
 markupsafe==2.1.1         # via jinja2, mako, nbconvert, werkzeug
-matid==0.6.1              # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml)
 matplotlib==3.5.3         # via ase, asr, hyperspy, mdanalysis, phonopy, pymatgen
 matplotlib-inline==0.1.6  # via ipykernel, ipython
 mdanalysis==2.1.0         # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab (pyproject.toml)
@@ -142,12 +140,12 @@ nbconvert==7.2.5          # via jupyter-server
 nbformat==5.7.0           # via jupyter-server, nbclient, nbconvert
 nest-asyncio==1.5.6       # via ipykernel, jupyter-client, nbclient
 netcdf4==1.5.4            # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml)
-networkx==2.6.3           # via matid, matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, scikit-image
+networkx==2.6.3           # via matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, scikit-image
 nptyping==1.4.4           # via nomad-lab (pyproject.toml)
 numba==0.56.4             # via hyperspy, sparse
 numcodecs==0.10.2         # via zarr
 numexpr==2.8.4            # via hyperspy
-numpy==1.21.2             # via ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
+numpy==1.21.2             # via ase, biopython, cftime, dask, griddataformats, gsd, h5grove, h5py, hyperspy, imageio, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nexusparser (dependencies/parsers/nexus/pyproject.toml), nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, xrdtools, zarr
 oauthenticator==14.2.0    # via nomad-lab (pyproject.toml)
 oauthlib==3.2.2           # via jupyterhub
 openpyxl==3.0.9           # via nomad-lab (pyproject.toml)
@@ -209,18 +207,17 @@ ruamel-yaml==0.17.21      # via jupyter-telemetry, pymatgen
 ruamel-yaml-clib==0.2.7   # via ruamel-yaml
 runstats==2.0.0           # via nomad-lab (pyproject.toml)
 scikit-image==0.19.3      # via hyperspy
-scikit-learn==0.24.2      # via matid (dependencies/matid/pyproject.toml), nomad-lab (pyproject.toml)
-scipy==1.7.1              # via ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
+scikit-learn==0.24.2      # via matid (dependencies/matid/pyproject.toml)
+scipy==1.7.1              # via ase, atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, scikit-image, scikit-learn, sparse
 send2trash==1.8.0         # via jupyter-server
 sentinels==1.0.0          # via mongomock
 six==1.16.0               # via astunparse, basicauth, bcrypt, bleach, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, python-dateutil, python-multipart, rdflib, rfc3339-validator, validators
-sklearn==0.0.post1        # via matid
 smmap==5.0.0              # via gitdb
 sniffio==1.3.0            # via anyio, httpcore, httpx
 snowballstemmer==2.2.0    # via sphinx
 soupsieve==2.3.2.post1    # via beautifulsoup4
 sparse==0.13.0            # via hyperspy
-spglib==2.0.2             # via asr, matid, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
+spglib==2.0.2             # via asr, matid (dependencies/matid/pyproject.toml), phonopy, pymatgen
 sphinx==5.3.0             # via recommonmark
 sphinxcontrib-applehelp==1.0.2  # via sphinx
 sphinxcontrib-devhelp==1.0.2  # via sphinx
diff --git a/scripts/build_sdist.sh b/scripts/build_sdist.sh
index 074d25a13e..289bccaf1a 100755
--- a/scripts/build_sdist.sh
+++ b/scripts/build_sdist.sh
@@ -21,6 +21,5 @@ yarn run build
 cd ..
 mkdir -p nomad/app/static/gui
 cp -r build/* nomad/app/static/gui
-rm nomad/app/static/gui/env.js
 
 python -m build --sdist
\ No newline at end of file
diff --git a/scripts/check_gui_artifacts.sh b/scripts/check_gui_artifacts.sh
index 782ff6c8ae..5eea2692c8 100755
--- a/scripts/check_gui_artifacts.sh
+++ b/scripts/check_gui_artifacts.sh
@@ -21,9 +21,8 @@ diff gui/src/unitsData.js tmp/unitsData.js
 diff gui/src/exampleUploads.json tmp/exampleUploads.json
 diff gui/src/northTools.json tmp/northTools.json
 
-python -m nomad.cli dev gui-config >tmp/env.js
-
-diff gui/public/env.js tmp/env.js
+NOMAD_CONFIG=gui/tests/nomad.yaml python -m nomad.cli dev gui-config >tmp/env.js
+diff gui/tests/env.js tmp/env.js
 
 # cleanup
 rm -rf tmp
diff --git a/scripts/generate_gui_artifacts.sh b/scripts/generate_gui_artifacts.sh
index f2a12693c3..45b22b50f0 100755
--- a/scripts/generate_gui_artifacts.sh
+++ b/scripts/generate_gui_artifacts.sh
@@ -8,4 +8,5 @@ project_dir=$(dirname $(dirname $(realpath $0)))
 cd $project_dir
 
 python -m nomad.cli dev gui-artifacts --output-directory gui/src
-python -m nomad.cli dev gui-config >gui/public/env.js
+
+NOMAD_CONFIG=gui/tests/nomad.yaml python -m nomad.cli dev gui-config >gui/tests/env.js
diff --git a/scripts/generate_gui_config.sh b/scripts/generate_gui_config.sh
new file mode 100755
index 0000000000..5e890930f0
--- /dev/null
+++ b/scripts/generate_gui_config.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+working_dir=$(pwd)
+project_dir=$(dirname $(dirname $(realpath $0)))
+
+cd $project_dir
+
+python -m nomad.cli dev gui-config >gui/public/env.js
-- 
GitLab